Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/Makefile
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/Makefile	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/Makefile	(revision 72)
@@ -0,0 +1,24 @@
+# 
+# $Id$
+# 
+# [ Description ]
+# 
+# Makefile
+# 
+
+#-----[ Directory ]----------------------------------------
+DIR_COMPONENT			= ./
+include				$(DIR_COMPONENT)/Makefile.defs
+
+#-----[ Library ]------------------------------------------
+LIBRARY				= $(DIR_LIB)/libFunctionnal_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/Multi_Execute_unit/Execute_unit/Functionnal_unit/Makefile.defs
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/Makefile.defs	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/Makefile.defs	(revision 72)
@@ -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/Multi_Execute_unit/Execute_unit/Functionnal_unit/Makefile.deps
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/Makefile.deps	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/Makefile.deps	(revision 72)
@@ -0,0 +1,44 @@
+# 
+# $Id$
+# 
+# [ Description ]
+# 
+# Makefile
+# 
+# DIR_MORPHEO must be defined
+
+Functionnal_unit			= yes
+
+ifndef Behavioural
+include 			$(DIR_MORPHEO)/Behavioural/Makefile.deps
+endif
+ifndef Custom
+include 			$(DIR_MORPHEO)/Behavioural/Custom/Makefile.deps
+endif
+
+#-----[ Library ]------------------------------------------
+Functionnal_unit_LIBRARY	= 	-lFunctionnal_unit	\
+					$(Custom_LIBRARY)	\
+					$(Behavioural_LIBRARY)	
+
+Functionnal_unit_DIR_LIBRARY	=	-L$(DIR_MORPHEO)/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/lib	\
+					$(Custom_DIR_LIBRARY)	\
+					$(Behavioural_DIR_LIBRARY)
+
+Functionnal_unit_DEPENDENCIES	=	Custom_library	\
+					Behavioural_library
+
+Functionnal_unit_CLEAN        	=	Custom_library_clean	\
+					Behavioural_library_clean
+
+#-----[ Rules ]--------------------------------------------
+
+#.NOTPARALLEL			: Functionnal_unit_library Functionnal_unit_library_clean
+
+Functionnal_unit_library	: $(Functionnal_unit_DEPENDENCIES)
+				@\
+				$(MAKE) --directory=$(DIR_MORPHEO)/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit --makefile=Makefile;
+
+Functionnal_unit_library_clean	: $(Functionnal_unit_CLEAN)
+				@\
+				$(MAKE) --directory=$(DIR_MORPHEO)/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit --makefile=Makefile clean;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/Makefile
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/Makefile	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/Makefile	(revision 72)
@@ -0,0 +1,30 @@
+# 
+# $Id$
+# 
+# [ Description ]
+# 
+# Makefile
+# 
+
+#-----[ Directory ]----------------------------------------
+DIR_COMPONENT			= ../
+include				$(DIR_COMPONENT)/Makefile.defs
+
+LIBRARY				= $(Functionnal_unit_LIBRARY)
+
+DIR_LIBRARY			= $(Functionnal_unit_DIR_LIBRARY)
+
+#-----[ include ]------------------------------------------
+
+all				:
+				@$(MAKE) all_selftest
+
+library				: Functionnal_unit_library
+
+library_clean			: Functionnal_unit_library_clean
+
+include                         $(DIR_COMPONENT)/Makefile.deps
+include                         $(DIR_MORPHEO)/Behavioural/Makefile.flags
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Common
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Selftest
+include 			$(DIR_MORPHEO)/Behavioural/Makefile.Synthesis
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/configuration.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/configuration.cfg	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/configuration.cfg	(revision 72)
@@ -0,0 +1,11 @@
+Functionnal_unit
+1	1	+1	# nb_context         
+1	1	+1	# nb_front_end       
+2	2	+1	# nb_ooo_engine      
+1024	1024	+1	# nb_packet          
+32	32	+1	# size_general_data  
+32	32	+1	# nb_general_register
+2 	2 	+1	# size_special_data  
+16	16	+1	# nb_special_register
+10	10	+1	# nb_operation       
+4	4	+1	# nb_type            
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/include/test.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/include/test.h	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/include/test.h	(revision 72)
@@ -0,0 +1,32 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ * Test "RegisterFile"
+ */
+
+#ifdef SYSTEMC
+#include "systemc.h"
+#endif
+
+#include <string>
+#include <iostream>
+#include <sys/time.h>
+
+#include "Common/include/Time.h"
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_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::multi_execute_unit;
+using namespace morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit;
+
+using namespace morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit;
+
+void test    (string name,
+	      morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::Parameters * param);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/src/main.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/src/main.cpp	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/src/main.cpp	(revision 72)
@@ -0,0 +1,94 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/include/test.h"
+#include "Behavioural/Custom/include/Custom_example.h"
+
+#define NB_PARAMS 10
+
+void usage (int argc, char * argv[])
+{
+  err (_("<Usage> %s name_instance list_params.\n"),argv[0]);
+  err (_("list_params is :\n"));
+  err (_("  * nb_context          (uint32_t)\n"));
+  err (_("  * nb_front_end        (uint32_t)\n"));
+  err (_("  * nb_ooo_engine       (uint32_t)\n"));
+  err (_("  * nb_packet           (uint32_t)\n"));
+  err (_("  * size_general_data   (uint32_t)\n"));
+  err (_("  * nb_general_register (uint32_t)\n"));
+  err (_("  * size_special_data   (uint32_t)\n"));
+  err (_("  * nb_special_register (uint32_t)\n"));
+  err (_("  * nb_operation        (uint32_t)\n"));
+  err (_("  * nb_type             (uint32_t)\n"));
+  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;
+
+  const string   name                =      argv[x++];
+  const uint32_t nb_context          = atoi(argv[x++]);
+  const uint32_t nb_front_end        = atoi(argv[x++]);
+  const uint32_t nb_ooo_engine       = atoi(argv[x++]);
+  const uint32_t nb_packet           = atoi(argv[x++]);
+  const uint32_t size_general_data   = atoi(argv[x++]);
+  const uint32_t nb_general_register = atoi(argv[x++]);
+  const uint32_t size_special_data   = atoi(argv[x++]);
+  const uint32_t nb_special_register = atoi(argv[x++]);
+  const uint32_t nb_operation        = atoi(argv[x++]);
+  const uint32_t nb_type             = atoi(argv[x++]);
+
+  execute_timing_t * timing = new execute_timing_t [MAX_OPERATION];
+
+  for (uint32_t i=0; i< MAX_OPERATION; i++)
+    timing[i]._delay = timing[i]._latence = 1;
+
+  try 
+    {
+      morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::Parameters * param = new morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::Parameters
+	(nb_context          ,
+	 nb_front_end        ,
+	 nb_ooo_engine       ,
+	 nb_packet           ,
+	 size_general_data   ,
+	 nb_general_register ,
+	 size_special_data   ,
+	 nb_special_register ,
+	 nb_operation        ,
+	 nb_type             ,
+	 timing              ,
+	 &(morpheo::behavioural::custom::example_get_custom_information)
+        );
+      
+      msg(_("%s"),param->print(1).c_str());
+      
+      test (name,param);
+    }
+  catch (morpheo::ErrorMorpheo & error)
+    {
+      msg (_("<%s> : %s.\n"),name.c_str(), error.what ());
+      exit (EXIT_FAILURE);
+    }
+  catch (...)
+    {
+      err (_("<%s> : This test must generate a error.\n"),name.c_str());
+      exit (EXIT_FAILURE);
+    }
+
+  delete timing;
+  
+  return (EXIT_SUCCESS);
+}
+
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/src/test.cpp	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/src/test.cpp	(revision 72)
@@ -0,0 +1,726 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ * Test
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/include/test.h"
+#include "Common/include/Test.h"
+
+#define NB_ITERATION  1
+#define CYCLE_MAX     (1024*NB_ITERATION)
+
+#define LABEL(str...)							\
+  {									\
+    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
+    msg (str);								\
+    msg (_("\n"));							\
+  } while(0)
+
+#define SC_START(cycle_offset)                                                       \
+  do									             \
+    {									             \
+      /*cout << "SC_START (begin)" << endl;*/				             \
+									             \
+      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
+      if (cycle_offset != 0)						             \
+	{								             \
+	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
+	}								             \
+									             \
+      if (cycle_current > CYCLE_MAX)					             \
+	{								             \
+	  TEST_KO("Maximal cycles Reached");				             \
+	}								             \
+									             \
+      sc_start(cycle_offset);						             \
+									             \
+      /*cout << "SC_START (end  )" << endl;*/				             \
+    } while(0)
+
+class execute_transaction
+{
+public : const Tcontext_t         _context_id   ;
+public : const Tcontext_t         _front_end_id ;
+public : const Tcontext_t         _ooo_engine_id;
+public : const Tpacket_t          _packet_id    ;
+public : const Toperation_t       _operation    ;
+public : const Ttype_t            _type         ;
+public : const Tcontrol_t         _has_immediat ;
+public : const Tgeneral_data_t    _immediat     ;
+public : const Tgeneral_data_t    _data_ra      ;
+public : const Tgeneral_data_t    _data_rb      ;
+public : const Tspecial_data_t    _data_rc      ;
+public : const Tcontrol_t         _write_rd     ;
+public : const Tgeneral_address_t _num_reg_rd   ;
+public : const Tgeneral_data_t    _data_rd      ;
+public : const Tcontrol_t         _write_re     ;
+public : const Tspecial_address_t _num_reg_re   ;
+public : const Tspecial_data_t    _data_re      ;
+public : const Texception_t       _exception    ;
+public : const Tcontrol_t         _no_sequence  ;
+public : const Tgeneral_data_t    _address      ;
+
+public : execute_transaction (morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::Parameters * param        ,
+			      Tcontext_t         context_id   ,
+			      Tcontext_t         front_end_id ,
+			      Tcontext_t         ooo_engine_id,
+			      Tpacket_t          packet_id    ,
+			      Toperation_t       operation    ,
+			      Ttype_t            type         ,
+			      Tcontrol_t         has_immediat ,
+			      Tgeneral_data_t    immediat     ,
+			      Tgeneral_data_t    data_ra      ,
+			      Tgeneral_data_t    data_rb      ,
+			      Tspecial_data_t    data_rc      ,
+			      Tcontrol_t         write_rd     ,
+			      Tgeneral_address_t num_reg_rd   ,
+			      Tgeneral_data_t    data_rd      ,
+			      Tcontrol_t         write_re     ,
+			      Tspecial_address_t num_reg_re   ,
+			      Tspecial_data_t    data_re      ,
+			      Texception_t       exception    ,
+			      Tcontrol_t         no_sequence  ,
+			      Tgeneral_data_t    address     =0):
+  _context_id    (context_id   % param->_nb_context   ),
+  _front_end_id  (front_end_id % param->_nb_front_end ),
+  _ooo_engine_id (ooo_engine_id% param->_nb_ooo_engine),
+  _packet_id     (packet_id    % param->_nb_packet    ),
+  _operation     (operation    ),
+  _type          (type         ),
+  _has_immediat  (has_immediat ),
+  _immediat      (immediat     & gen_mask<Tgeneral_data_t>(param->_size_general_data)),
+  _data_ra       (data_ra      & gen_mask<Tgeneral_data_t>(param->_size_general_data)),
+  _data_rb       (data_rb      & gen_mask<Tgeneral_data_t>(param->_size_general_data)),
+  _data_rc       (data_rc      & gen_mask<Tspecial_data_t>(param->_size_special_data)),
+  _write_rd      (write_rd     ),
+  _num_reg_rd    (num_reg_rd   % param->_nb_special_register),
+  _data_rd       (data_rd      & gen_mask<Tgeneral_data_t>(param->_size_general_data)),
+  _write_re      (write_re     ),
+  _num_reg_re    (num_reg_re   % param->_nb_special_register),
+  _data_re       (data_re      & gen_mask<Tspecial_data_t>(param->_size_special_data)),
+  _exception     (exception    ),
+  _no_sequence   (no_sequence  ),
+  _address       (address      & gen_mask<Tgeneral_data_t>(param->_size_general_data))
+  {
+    
+  }
+};
+
+void test (string name,
+	   morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::Parameters * _param)
+{
+  msg(_("<%s> : Simulation SystemC.\n"),name.c_str());
+
+#ifdef STATISTICS
+  morpheo::behavioural::Parameters_Statistics * _parameters_statistics = new morpheo::behavioural::Parameters_Statistics (5,50);
+#endif
+
+  Functionnal_unit * _Functionnal_unit = new Functionnal_unit (name.c_str(),
+#ifdef STATISTICS
+					     _parameters_statistics,
+#endif
+					     _param);
+  
+#ifdef SYSTEMC
+  /*********************************************************************
+   * Déclarations des signaux
+   *********************************************************************/
+  string rename = "";
+
+  sc_clock              in_CLOCK  ("clock", 1.0, 0.5);	 
+  sc_signal<Tcontrol_t> in_NRESET ("nreset");
+
+  sc_signal<Tcontrol_t        >  in_EXECUTE_IN_VAL            (rename.c_str());
+  sc_signal<Tcontrol_t        > out_EXECUTE_IN_ACK            (rename.c_str());
+  sc_signal<Tcontext_t        >  in_EXECUTE_IN_CONTEXT_ID     (rename.c_str());
+  sc_signal<Tcontext_t        >  in_EXECUTE_IN_FRONT_END_ID   (rename.c_str());
+  sc_signal<Tcontext_t        >  in_EXECUTE_IN_OOO_ENGINE_ID  (rename.c_str());
+  sc_signal<Tpacket_t         >  in_EXECUTE_IN_PACKET_ID      (rename.c_str());
+  sc_signal<Toperation_t      >  in_EXECUTE_IN_OPERATION      (rename.c_str());
+  sc_signal<Ttype_t           >  in_EXECUTE_IN_TYPE           (rename.c_str());
+  sc_signal<Tcontrol_t        >  in_EXECUTE_IN_HAS_IMMEDIAT   (rename.c_str());
+  sc_signal<Tgeneral_data_t   >  in_EXECUTE_IN_IMMEDIAT       (rename.c_str());
+  sc_signal<Tgeneral_data_t   >  in_EXECUTE_IN_DATA_RA        (rename.c_str());
+  sc_signal<Tgeneral_data_t   >  in_EXECUTE_IN_DATA_RB        (rename.c_str());
+  sc_signal<Tspecial_data_t   >  in_EXECUTE_IN_DATA_RC        (rename.c_str());
+  sc_signal<Tcontrol_t        >  in_EXECUTE_IN_WRITE_RD       (rename.c_str());
+  sc_signal<Tgeneral_address_t>  in_EXECUTE_IN_NUM_REG_RD     (rename.c_str());
+  sc_signal<Tcontrol_t        >  in_EXECUTE_IN_WRITE_RE       (rename.c_str());
+  sc_signal<Tspecial_address_t>  in_EXECUTE_IN_NUM_REG_RE     (rename.c_str());
+
+    // ~~~~~[ Interface "execute_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  sc_signal<Tcontrol_t        > out_EXECUTE_OUT_VAL            (rename.c_str());
+  sc_signal<Tcontrol_t        >  in_EXECUTE_OUT_ACK            (rename.c_str());
+  sc_signal<Tcontext_t        > out_EXECUTE_OUT_CONTEXT_ID     (rename.c_str());
+  sc_signal<Tcontext_t        > out_EXECUTE_OUT_FRONT_END_ID   (rename.c_str());
+  sc_signal<Tcontext_t        > out_EXECUTE_OUT_OOO_ENGINE_ID  (rename.c_str());
+  sc_signal<Tpacket_t         > out_EXECUTE_OUT_PACKET_ID      (rename.c_str());
+//sc_signal<Toperation_t      > out_EXECUTE_OUT_OPERATION      (rename.c_str());
+//sc_signal<Ttype_t           > out_EXECUTE_OUT_TYPE           (rename.c_str());
+  sc_signal<Tcontrol_t        > out_EXECUTE_OUT_WRITE_RD       (rename.c_str());
+  sc_signal<Tgeneral_address_t> out_EXECUTE_OUT_NUM_REG_RD     (rename.c_str());
+  sc_signal<Tgeneral_data_t   > out_EXECUTE_OUT_DATA_RD        (rename.c_str());
+  sc_signal<Tcontrol_t        > out_EXECUTE_OUT_WRITE_RE       (rename.c_str());
+  sc_signal<Tspecial_address_t> out_EXECUTE_OUT_NUM_REG_RE     (rename.c_str());
+  sc_signal<Tspecial_data_t   > out_EXECUTE_OUT_DATA_RE        (rename.c_str());
+  sc_signal<Texception_t      > out_EXECUTE_OUT_EXCEPTION      (rename.c_str());
+  sc_signal<Tcontrol_t        > out_EXECUTE_OUT_NO_SEQUENCE    (rename.c_str());
+  sc_signal<Tgeneral_data_t   > out_EXECUTE_OUT_ADDRESS        (rename.c_str());
+  
+  /********************************************************
+   * Instanciation
+   ********************************************************/
+  
+  msg(_("<%s> : Instanciation of _Functionnal_unit.\n"),name.c_str());
+
+  (*(_Functionnal_unit->in_CLOCK))        (in_CLOCK);
+  (*(_Functionnal_unit->in_NRESET))       (in_NRESET);
+  (*(_Functionnal_unit-> in_EXECUTE_IN_VAL           )) ( in_EXECUTE_IN_VAL           );
+  (*(_Functionnal_unit->out_EXECUTE_IN_ACK           )) (out_EXECUTE_IN_ACK           );
+  if (_param->_have_port_context_id)
+  (*(_Functionnal_unit-> in_EXECUTE_IN_CONTEXT_ID    )) ( in_EXECUTE_IN_CONTEXT_ID    );
+  if (_param->_have_port_front_end_id)
+  (*(_Functionnal_unit-> in_EXECUTE_IN_FRONT_END_ID  )) ( in_EXECUTE_IN_FRONT_END_ID  );
+  if (_param->_have_port_ooo_engine_id)
+  (*(_Functionnal_unit-> in_EXECUTE_IN_OOO_ENGINE_ID )) ( in_EXECUTE_IN_OOO_ENGINE_ID );
+  if (_param->_have_port_packet_id)
+  (*(_Functionnal_unit-> in_EXECUTE_IN_PACKET_ID     )) ( in_EXECUTE_IN_PACKET_ID     );
+  (*(_Functionnal_unit-> in_EXECUTE_IN_OPERATION     )) ( in_EXECUTE_IN_OPERATION     );
+  (*(_Functionnal_unit-> in_EXECUTE_IN_TYPE          )) ( in_EXECUTE_IN_TYPE          );
+  (*(_Functionnal_unit-> in_EXECUTE_IN_HAS_IMMEDIAT  )) ( in_EXECUTE_IN_HAS_IMMEDIAT  );
+  (*(_Functionnal_unit-> in_EXECUTE_IN_IMMEDIAT      )) ( in_EXECUTE_IN_IMMEDIAT      );
+  (*(_Functionnal_unit-> in_EXECUTE_IN_DATA_RA       )) ( in_EXECUTE_IN_DATA_RA       );
+  (*(_Functionnal_unit-> in_EXECUTE_IN_DATA_RB       )) ( in_EXECUTE_IN_DATA_RB       );
+  (*(_Functionnal_unit-> in_EXECUTE_IN_DATA_RC       )) ( in_EXECUTE_IN_DATA_RC       );
+  (*(_Functionnal_unit-> in_EXECUTE_IN_WRITE_RD      )) ( in_EXECUTE_IN_WRITE_RD      );
+  (*(_Functionnal_unit-> in_EXECUTE_IN_NUM_REG_RD    )) ( in_EXECUTE_IN_NUM_REG_RD    );
+  (*(_Functionnal_unit-> in_EXECUTE_IN_WRITE_RE      )) ( in_EXECUTE_IN_WRITE_RE      );
+  (*(_Functionnal_unit-> in_EXECUTE_IN_NUM_REG_RE    )) ( in_EXECUTE_IN_NUM_REG_RE    );
+  
+  (*(_Functionnal_unit->out_EXECUTE_OUT_VAL          )) (out_EXECUTE_OUT_VAL          );
+  (*(_Functionnal_unit-> in_EXECUTE_OUT_ACK          )) ( in_EXECUTE_OUT_ACK          );
+  if (_param->_have_port_context_id)
+  (*(_Functionnal_unit->out_EXECUTE_OUT_CONTEXT_ID   )) (out_EXECUTE_OUT_CONTEXT_ID   );
+  if (_param->_have_port_front_end_id)
+  (*(_Functionnal_unit->out_EXECUTE_OUT_FRONT_END_ID )) (out_EXECUTE_OUT_FRONT_END_ID );
+  if (_param->_have_port_ooo_engine_id)
+  (*(_Functionnal_unit->out_EXECUTE_OUT_OOO_ENGINE_ID)) (out_EXECUTE_OUT_OOO_ENGINE_ID);
+  if (_param->_have_port_packet_id)
+  (*(_Functionnal_unit->out_EXECUTE_OUT_PACKET_ID    )) (out_EXECUTE_OUT_PACKET_ID    );
+//(*(_Functionnal_unit->out_EXECUTE_OUT_OPERATION    )) (out_EXECUTE_OUT_OPERATION    );
+//(*(_Functionnal_unit->out_EXECUTE_OUT_TYPE         )) (out_EXECUTE_OUT_TYPE         );
+  (*(_Functionnal_unit->out_EXECUTE_OUT_WRITE_RD     )) (out_EXECUTE_OUT_WRITE_RD     );
+  (*(_Functionnal_unit->out_EXECUTE_OUT_NUM_REG_RD   )) (out_EXECUTE_OUT_NUM_REG_RD   );
+  (*(_Functionnal_unit->out_EXECUTE_OUT_DATA_RD      )) (out_EXECUTE_OUT_DATA_RD      );
+  (*(_Functionnal_unit->out_EXECUTE_OUT_WRITE_RE     )) (out_EXECUTE_OUT_WRITE_RE     );
+  (*(_Functionnal_unit->out_EXECUTE_OUT_NUM_REG_RE   )) (out_EXECUTE_OUT_NUM_REG_RE   );
+  (*(_Functionnal_unit->out_EXECUTE_OUT_DATA_RE      )) (out_EXECUTE_OUT_DATA_RE      );
+  (*(_Functionnal_unit->out_EXECUTE_OUT_EXCEPTION    )) (out_EXECUTE_OUT_EXCEPTION    );
+  (*(_Functionnal_unit->out_EXECUTE_OUT_NO_SEQUENCE  )) (out_EXECUTE_OUT_NO_SEQUENCE  );
+  (*(_Functionnal_unit->out_EXECUTE_OUT_ADDRESS      )) (out_EXECUTE_OUT_ADDRESS      );
+
+  msg(_("<%s> : Start Simulation ............\n"),name.c_str());
+    
+  Time * _time = new Time();
+
+  /********************************************************
+   * Simulation - Begin
+   ********************************************************/
+
+  // Initialisation
+
+  const  int32_t percent_transaction_execute_in  = 75;
+  const  int32_t percent_transaction_execute_out = 75;
+
+  const uint32_t seed = 0;
+//const uint32_t seed = static_cast<uint32_t>(time(NULL));
+
+  srand(seed);
+
+  list<execute_transaction> transaction_in;
+  list<execute_transaction> transaction_out;
+  int32_t nb_transaction_out;
+
+
+  SC_START(0);
+  LABEL("Initialisation");
+  
+  transaction_in.push_back(execute_transaction(_param,0,0,0,  0,OPERATION_ALU_L_ADD     ,TYPE_ALU,0,0xdeadbeef,0x12344321,0x12345678,0              ,1,63,0x24689999,1,15,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,  1,OPERATION_ALU_L_ADD     ,TYPE_ALU,0,0xffffffff,0x12345678,0x12345678,0              ,1,56,0x2468acf0,1,3 ,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,  2,OPERATION_ALU_L_ADD     ,TYPE_ALU,1,0x12345678,0x12345678,0xffffffff,0              ,1,56,0x2468acf0,1,3 ,0              ,EXCEPTION_NONE     ,0));
+  // Test L_ADD flags					     			       
+  transaction_in.push_back(execute_transaction(_param,0,0,0,  3,OPERATION_ALU_L_ADD     ,TYPE_ALU,1,0x0       ,0x0       ,0x0       ,0              ,1,56,0x0       ,1,3 ,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,  4,OPERATION_ALU_L_ADD     ,TYPE_ALU,1,0x90000000,0x70000000,0x0       ,0              ,1,56,0x0       ,1,3 ,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,  5,OPERATION_ALU_L_ADD     ,TYPE_ALU,1,0x80000000,0x80001000,0x0       ,0              ,1,1 ,0x1000    ,1,0 ,FLAG_CY|FLAG_OV,EXCEPTION_ALU_RANGE,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,  6,OPERATION_ALU_L_ADD     ,TYPE_ALU,1,0x7fffffff,0x00000001,0x0       ,FLAG_CY|FLAG_OV,1,1 ,0x80000000,1,0 ,        FLAG_OV,EXCEPTION_ALU_RANGE,0));
+							     			       
+							     			       
+  transaction_in.push_back(execute_transaction(_param,0,0,0,  7,OPERATION_ALU_L_ADDC    ,TYPE_ALU,0,0xdeadbeef,0x12344321,0x12345678,0              ,1,63,0x24689999,1,15,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,  8,OPERATION_ALU_L_ADDC    ,TYPE_ALU,0,0xffffffff,0x12345678,0x12345678,0              ,1,56,0x2468acf0,1,3 ,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,  9,OPERATION_ALU_L_ADDC    ,TYPE_ALU,1,0x12345678,0x12345678,0xffffffff,0              ,1,56,0x2468acf0,1,3 ,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 10,OPERATION_ALU_L_ADDC    ,TYPE_ALU,1,0x0       ,0x0       ,0x0       ,0              ,1,56,0x0       ,1,3 ,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 11,OPERATION_ALU_L_ADDC    ,TYPE_ALU,1,0x90000000,0x70000000,0x0       ,0              ,1,56,0x0       ,1,3 ,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 12,OPERATION_ALU_L_ADDC    ,TYPE_ALU,1,0x80000000,0x80001000,0x0       ,0              ,1,1 ,0x1000    ,1,0 ,FLAG_CY|FLAG_OV,EXCEPTION_ALU_RANGE,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 13,OPERATION_ALU_L_ADDC    ,TYPE_ALU,1,0x7fffffff,0x00000001,0x0       ,0              ,1,1 ,0x80000000,1,0 ,        FLAG_OV,EXCEPTION_ALU_RANGE,0));
+							     			       
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 14,OPERATION_ALU_L_ADDC    ,TYPE_ALU,0,0xdeadbeef,0x12344320,0x12345678,FLAG_CY        ,1,63,0x24689999,1,15,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 15,OPERATION_ALU_L_ADDC    ,TYPE_ALU,0,0xffffffff,0x12345677,0x12345678,FLAG_CY        ,1,56,0x2468acf0,1,3 ,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 16,OPERATION_ALU_L_ADDC    ,TYPE_ALU,1,0x12345678,0x12345677,0xffffffff,FLAG_CY        ,1,56,0x2468acf0,1,3 ,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 17,OPERATION_ALU_L_ADDC    ,TYPE_ALU,1,0x0       ,0x0       ,0x0       ,FLAG_CY        ,1,56,0x00000001,1,3 ,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 18,OPERATION_ALU_L_ADDC    ,TYPE_ALU,1,0x90000000,0x70000003,0x0       ,FLAG_CY        ,1,56,0x00000004,1,3 ,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 19,OPERATION_ALU_L_ADDC    ,TYPE_ALU,1,0x80000000,0x8000000f,0x0       ,FLAG_CY        ,1,1 ,0x00000010,1,0 ,FLAG_CY|FLAG_OV,EXCEPTION_ALU_RANGE,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 20,OPERATION_ALU_L_ADDC    ,TYPE_ALU,1,0x7fffffff,0x00000000,0x0       ,FLAG_CY        ,1,1 ,0x80000000,1,0 ,        FLAG_OV,EXCEPTION_ALU_RANGE,0));
+							     			       
+  							     			       
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 21,OPERATION_ALU_L_AND     ,TYPE_ALU,0,0xdeadbeef,0x0000ffff,0x00ff00ff,0              ,1,63,0x000000ff,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 22,OPERATION_ALU_L_OR      ,TYPE_ALU,0,0xdeadbeef,0x0000ffff,0x00ff00ff,0              ,1,63,0x00ffffff,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 23,OPERATION_ALU_L_XOR     ,TYPE_ALU,0,0xdeadbeef,0x0000ffff,0x00ff00ff,0              ,1,63,0x00ffff00,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+							     			       
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 24,OPERATION_ALU_L_CMOV    ,TYPE_ALU,0,0x0       ,0xdeadbeef,0x12345678,0              ,1,63,0x12345678,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 25,OPERATION_ALU_L_CMOV    ,TYPE_ALU,0,0x0       ,0xdeadbeef,0x12345678,FLAG_F         ,1,63,0xdeadbeef,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+							     			       
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 26,OPERATION_ALU_L_MOVHI   ,TYPE_ALU,1,0xdeadbeef,0x0       ,0x0       ,FLAG_F         ,1,63,0xbeef0000,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+							     			       
+							     			       
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 27,OPERATION_ALU_L_TEST_F  ,TYPE_ALU,1,0xdeadbeef,0x0       ,0x0       ,0              ,0,63,0xbeef0000,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0,0x00000000));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 28,OPERATION_ALU_L_TEST_F  ,TYPE_ALU,1,0xdeadbeef,0x0       ,0x0       ,FLAG_F         ,0,63,0xbeef0000,0,15,FLAG_CY        ,EXCEPTION_NONE     ,1,0xdeadbeef));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 29,OPERATION_ALU_L_TEST_NF ,TYPE_ALU,1,0xdeadbeef,0x0       ,0x0       ,FLAG_F         ,0,63,0xbeef0000,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0,0x00000000));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 30,OPERATION_ALU_L_TEST_NF ,TYPE_ALU,1,0xdeadbeef,0x0       ,0x0       ,0              ,0,63,0xbeef0000,0,15,FLAG_CY        ,EXCEPTION_NONE     ,1,0xdeadbeef));
+							     			       
+  							     			       
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 31,OPERATION_ALU_L_JALR    ,TYPE_ALU,0,0xdeadbeef,0x0       ,0x12345678,0              ,0,63,0xdeadbeef,0,15,FLAG_CY        ,EXCEPTION_NONE     ,1,0x12345678)); // jr
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 32,OPERATION_ALU_L_JALR    ,TYPE_ALU,1,0xdeadbeef,0x0       ,0x12345678,0              ,1,63,0xdeadbeef,0,15,FLAG_CY        ,EXCEPTION_NONE     ,1,0x12345678)); // jal
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 33,OPERATION_ALU_L_JALR    ,TYPE_ALU,1,0xdeadbeef,0x0       ,0x12345678,0              ,1,63,0xdeadbeef,0,15,FLAG_CY        ,EXCEPTION_NONE     ,1,0x12345678)); // jalr
+							     
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 34,OPERATION_ALU_L_EXTEND_S,TYPE_ALU,1,8         ,0x12345678,0x0       ,0              ,1,63,0x00000078,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 35,OPERATION_ALU_L_EXTEND_S,TYPE_ALU,1,16        ,0x12345678,0x0       ,0              ,1,63,0x00005678,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 36,OPERATION_ALU_L_EXTEND_S,TYPE_ALU,1,32        ,0x12345678,0x0       ,0              ,1,63,0x12345678,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 34,OPERATION_ALU_L_EXTEND_S,TYPE_ALU,1,8         ,0xdeadbeef,0x0       ,0              ,1,63,0xffffffef,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 35,OPERATION_ALU_L_EXTEND_S,TYPE_ALU,1,16        ,0xdeadbeef,0x0       ,0              ,1,63,0xffffbeef,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 36,OPERATION_ALU_L_EXTEND_S,TYPE_ALU,1,32        ,0xdeadbeef,0x0       ,0              ,1,63,0xdeadbeef,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+							     
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 37,OPERATION_ALU_L_EXTEND_Z,TYPE_ALU,1,8         ,0x12345678,0x0       ,0              ,1,63,0x00000078,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 38,OPERATION_ALU_L_EXTEND_Z,TYPE_ALU,1,16        ,0x12345678,0x0       ,0              ,1,63,0x00005678,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 39,OPERATION_ALU_L_EXTEND_Z,TYPE_ALU,1,32        ,0x12345678,0x0       ,0              ,1,63,0x12345678,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 40,OPERATION_ALU_L_EXTEND_Z,TYPE_ALU,1,8         ,0xdeadbeef,0x0       ,0              ,1,63,0x000000ef,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 41,OPERATION_ALU_L_EXTEND_Z,TYPE_ALU,1,16        ,0xdeadbeef,0x0       ,0              ,1,63,0x0000beef,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 42,OPERATION_ALU_L_EXTEND_Z,TYPE_ALU,1,32        ,0xdeadbeef,0x0       ,0              ,1,63,0xdeadbeef,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+							     
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 43,OPERATION_ALU_L_SLL     ,TYPE_ALU,1,0         ,0xdeadbeef,0x0       ,0              ,1,63,0xdeadbeef,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 44,OPERATION_ALU_L_SLL     ,TYPE_ALU,1,4         ,0xdeadbeef,0x0       ,0              ,1,63,0xeadbeef0,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 45,OPERATION_ALU_L_SLL     ,TYPE_ALU,1,8         ,0xdeadbeef,0x0       ,0              ,1,63,0xadbeef00,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 46,OPERATION_ALU_L_SLL     ,TYPE_ALU,1,16        ,0xdeadbeef,0x0       ,0              ,1,63,0xbeef0000,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 47,OPERATION_ALU_L_SLL     ,TYPE_ALU,1,24        ,0xdeadbeef,0x0       ,0              ,1,63,0xef000000,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 48,OPERATION_ALU_L_SLL     ,TYPE_ALU,1,31        ,0xdeadbeef,0x0       ,0              ,1,63,0x80000000,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 49,OPERATION_ALU_L_SLL     ,TYPE_ALU,1,32        ,0xdeadbeef,0x0       ,0              ,1,63,0xdeadbeef,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+							     
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 50,OPERATION_ALU_L_SRL     ,TYPE_ALU,1,0         ,0xdeadbeef,0x0       ,0              ,1,63,0xdeadbeef,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 51,OPERATION_ALU_L_SRL     ,TYPE_ALU,1,4         ,0xdeadbeef,0x0       ,0              ,1,63,0xdeadbee ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 52,OPERATION_ALU_L_SRL     ,TYPE_ALU,1,8         ,0xdeadbeef,0x0       ,0              ,1,63,0xdeadbe  ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 53,OPERATION_ALU_L_SRL     ,TYPE_ALU,1,16        ,0xdeadbeef,0x0       ,0              ,1,63,0xdead    ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 54,OPERATION_ALU_L_SRL     ,TYPE_ALU,1,24        ,0xdeadbeef,0x0       ,0              ,1,63,0xde      ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 55,OPERATION_ALU_L_SRL     ,TYPE_ALU,1,31        ,0xdeadbeef,0x0       ,0              ,1,63,0x1       ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 56,OPERATION_ALU_L_SRL     ,TYPE_ALU,1,32        ,0xdeadbeef,0x0       ,0              ,1,63,0xdeadbeef,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+							     
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 57,OPERATION_ALU_L_SRL     ,TYPE_ALU,1,0         ,0x12345678,0x0       ,0              ,1,63,0x12345678,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 58,OPERATION_ALU_L_SRL     ,TYPE_ALU,1,4         ,0x12345678,0x0       ,0              ,1,63,0x1234567 ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 59,OPERATION_ALU_L_SRL     ,TYPE_ALU,1,8         ,0x12345678,0x0       ,0              ,1,63,0x123456  ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 60,OPERATION_ALU_L_SRL     ,TYPE_ALU,1,16        ,0x12345678,0x0       ,0              ,1,63,0x1234    ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 61,OPERATION_ALU_L_SRL     ,TYPE_ALU,1,24        ,0x12345678,0x0       ,0              ,1,63,0x12      ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 62,OPERATION_ALU_L_SRL     ,TYPE_ALU,1,31        ,0x12345678,0x0       ,0              ,1,63,0x0       ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 63,OPERATION_ALU_L_SRL     ,TYPE_ALU,1,32        ,0x12345678,0x0       ,0              ,1,63,0x12345678,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+							     
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 64,OPERATION_ALU_L_SRA     ,TYPE_ALU,1,0         ,0xdeadbeef,0x0       ,0              ,1,63,0xdeadbeef,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 65,OPERATION_ALU_L_SRA     ,TYPE_ALU,1,4         ,0xdeadbeef,0x0       ,0              ,1,63,0xfdeadbee,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 66,OPERATION_ALU_L_SRA     ,TYPE_ALU,1,8         ,0xdeadbeef,0x0       ,0              ,1,63,0xffdeadbe,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 67,OPERATION_ALU_L_SRA     ,TYPE_ALU,1,16        ,0xdeadbeef,0x0       ,0              ,1,63,0xffffdead,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 68,OPERATION_ALU_L_SRA     ,TYPE_ALU,1,24        ,0xdeadbeef,0x0       ,0              ,1,63,0xffffffde,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 69,OPERATION_ALU_L_SRA     ,TYPE_ALU,1,31        ,0xdeadbeef,0x0       ,0              ,1,63,0xffffffff,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 70,OPERATION_ALU_L_SRA     ,TYPE_ALU,1,32        ,0xdeadbeef,0x0       ,0              ,1,63,0xdeadbeef,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+							     
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 71,OPERATION_ALU_L_SRA     ,TYPE_ALU,1,0         ,0x12345678,0x0       ,0              ,1,63,0x12345678,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 72,OPERATION_ALU_L_SRA     ,TYPE_ALU,1,4         ,0x12345678,0x0       ,0              ,1,63,0x1234567 ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 73,OPERATION_ALU_L_SRA     ,TYPE_ALU,1,8         ,0x12345678,0x0       ,0              ,1,63,0x123456  ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 74,OPERATION_ALU_L_SRA     ,TYPE_ALU,1,16        ,0x12345678,0x0       ,0              ,1,63,0x1234    ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 75,OPERATION_ALU_L_SRA     ,TYPE_ALU,1,24        ,0x12345678,0x0       ,0              ,1,63,0x12      ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 76,OPERATION_ALU_L_SRA     ,TYPE_ALU,1,31        ,0x12345678,0x0       ,0              ,1,63,0x0       ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 77,OPERATION_ALU_L_SRA     ,TYPE_ALU,1,32        ,0x12345678,0x0       ,0              ,1,63,0x12345678,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+							     
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 78,OPERATION_ALU_L_ROR     ,TYPE_ALU,1,0         ,0xdeadbeef,0x0       ,0              ,1,63,0xdeadbeef,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 79,OPERATION_ALU_L_ROR     ,TYPE_ALU,1,4         ,0xdeadbeef,0x0       ,0              ,1,63,0xfdeadbee,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 80,OPERATION_ALU_L_ROR     ,TYPE_ALU,1,8         ,0xdeadbeef,0x0       ,0              ,1,63,0xefdeadbe,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 81,OPERATION_ALU_L_ROR     ,TYPE_ALU,1,16        ,0xdeadbeef,0x0       ,0              ,1,63,0xbeefdead,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 82,OPERATION_ALU_L_ROR     ,TYPE_ALU,1,24        ,0xdeadbeef,0x0       ,0              ,1,63,0xadbeefde,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 83,OPERATION_ALU_L_ROR     ,TYPE_ALU,1,32        ,0xdeadbeef,0x0       ,0              ,1,63,0xdeadbeef,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+							     
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 84,OPERATION_ALU_L_ROR     ,TYPE_ALU,1,0         ,0x12345678,0x0       ,0              ,1,63,0x12345678,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 85,OPERATION_ALU_L_ROR     ,TYPE_ALU,1,4         ,0x12345678,0x0       ,0              ,1,63,0x81234567,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 86,OPERATION_ALU_L_ROR     ,TYPE_ALU,1,8         ,0x12345678,0x0       ,0              ,1,63,0x78123456,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 87,OPERATION_ALU_L_ROR     ,TYPE_ALU,1,16        ,0x12345678,0x0       ,0              ,1,63,0x56781234,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 88,OPERATION_ALU_L_ROR     ,TYPE_ALU,1,24        ,0x12345678,0x0       ,0              ,1,63,0x34567812,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 89,OPERATION_ALU_L_ROR     ,TYPE_ALU,1,32        ,0x12345678,0x0       ,0              ,1,63,0x12345678,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+							     
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 90,OPERATION_ALU_L_FF1     ,TYPE_ALU,0,0         ,0x12345678,0x0       ,0              ,1,63,4         ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 91,OPERATION_ALU_L_FF1     ,TYPE_ALU,0,0         ,0x0       ,0x0       ,0              ,1,63,0          ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 92,OPERATION_ALU_L_FF1     ,TYPE_ALU,0,0         ,0x43210000,0x0       ,0              ,1,63,17         ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 93,OPERATION_ALU_L_FF1     ,TYPE_ALU,0,0         ,0x80000000,0x0       ,0              ,1,63,32         ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 94,OPERATION_ALU_L_FF1     ,TYPE_ALU,0,0         ,0x1       ,0x0       ,0              ,1,63,1          ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+							     
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 95,OPERATION_ALU_L_FL1     ,TYPE_ALU,0,0         ,0x12345678,0x0       ,0              ,1,63,29        ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 96,OPERATION_ALU_L_FL1     ,TYPE_ALU,0,0         ,0x0       ,0x0       ,0              ,1,63,0          ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 97,OPERATION_ALU_L_FL1     ,TYPE_ALU,0,0         ,0x00018765,0x0       ,0              ,1,63,17         ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 98,OPERATION_ALU_L_FL1     ,TYPE_ALU,0,0         ,0x1       ,0x0       ,0              ,1,63,1          ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0, 99,OPERATION_ALU_L_FL1     ,TYPE_ALU,0,0         ,0x80000000,0x0       ,0              ,1,63,32         ,0,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+
+//   transaction_in.push_back(execute_transaction(_param,0,0,0,100,OPERATION_ALU_L_SUB     ,TYPE_ALU,0,0         ,0x12344321,0x1       ,0              ,1,63,0x12344320,1,15,0              ,EXCEPTION_NONE     ,0));
+//   transaction_in.push_back(execute_transaction(_param,0,0,0,101,OPERATION_ALU_L_SUB     ,TYPE_ALU,0,0         ,0x12345678,0xffffffff,0              ,1,56,0x12345679,1,3 ,0              ,EXCEPTION_NONE     ,0));
+//   transaction_in.push_back(execute_transaction(_param,0,0,0,102,OPERATION_ALU_L_SUB     ,TYPE_ALU,0,0         ,0x12345678,0x12345678,0              ,1,56,0x0       ,1,3 ,0              ,EXCEPTION_NONE     ,0));
+//   transaction_in.push_back(execute_transaction(_param,0,0,0,103,OPERATION_ALU_L_SUB     ,TYPE_ALU,0,0         ,0x0       ,0x0       ,0              ,1,56,0x0       ,1,3 ,0              ,EXCEPTION_NONE     ,0));
+//   transaction_in.push_back(execute_transaction(_param,0,0,0,104,OPERATION_ALU_L_SUB     ,TYPE_ALU,0,0         ,0x70000000,0x90000000,0              ,1,56,0x0       ,1,3 ,FLAG_CY        ,EXCEPTION_NONE     ,0));
+//   transaction_in.push_back(execute_transaction(_param,0,0,0,105,OPERATION_ALU_L_SUB     ,TYPE_ALU,0,0         ,0x80001000,0x80000000,0              ,1,1 ,0x1000    ,1,0 ,FLAG_CY|FLAG_OV,EXCEPTION_ALU_RANGE,0));
+//   transaction_in.push_back(execute_transaction(_param,0,0,0,106,OPERATION_ALU_L_SUB     ,TYPE_ALU,0,0         ,0x00000001,0x7fffffff,FLAG_CY|FLAG_OV,1,1 ,0x80000000,1,0 ,        FLAG_OV,EXCEPTION_ALU_RANGE,0));
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,120,OPERATION_ALU_L_SFEQ    ,TYPE_ALU,0,0         ,0xdead    ,0xdead    ,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + == +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,121,OPERATION_ALU_L_SFEQ    ,TYPE_ALU,0,0         ,0x25071959,0x21071981,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + >  +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,122,OPERATION_ALU_L_SFEQ    ,TYPE_ALU,0,0         ,0x21071981,0x25071959,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + <  +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,123,OPERATION_ALU_L_SFEQ    ,TYPE_ALU,0,0         ,0xdeadbeef,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - == -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,124,OPERATION_ALU_L_SFEQ    ,TYPE_ALU,0,0         ,0xdeadbabe,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - >  -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,125,OPERATION_ALU_L_SFEQ    ,TYPE_ALU,0,0         ,0xdeadbeef,0xdeadbabe,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - <  -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,126,OPERATION_ALU_L_SFEQ    ,TYPE_ALU,0,0         ,0xdeadbeef,0x21524111,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - == + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,127,OPERATION_ALU_L_SFEQ    ,TYPE_ALU,0,0         ,0xdeadbeef,0x11111111,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - >  + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,128,OPERATION_ALU_L_SFEQ    ,TYPE_ALU,0,0         ,0xdeadbeef,0x33333333,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - <  + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,129,OPERATION_ALU_L_SFEQ    ,TYPE_ALU,0,0         ,0x21524111,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + == - (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,130,OPERATION_ALU_L_SFEQ    ,TYPE_ALU,0,0         ,0x33333333,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + >  - (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,131,OPERATION_ALU_L_SFEQ    ,TYPE_ALU,0,0         ,0x11111111,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + <  - (in unsigned)
+
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,140,OPERATION_ALU_L_SFNE    ,TYPE_ALU,0,0         ,0xdead    ,0xdead    ,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + == +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,141,OPERATION_ALU_L_SFNE    ,TYPE_ALU,0,0         ,0x25071959,0x21071981,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + >  +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,142,OPERATION_ALU_L_SFNE    ,TYPE_ALU,0,0         ,0x21071981,0x25071959,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + <  +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,143,OPERATION_ALU_L_SFNE    ,TYPE_ALU,0,0         ,0xdeadbeef,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - == -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,144,OPERATION_ALU_L_SFNE    ,TYPE_ALU,0,0         ,0xdeadbabe,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - >  -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,145,OPERATION_ALU_L_SFNE    ,TYPE_ALU,0,0         ,0xdeadbeef,0xdeadbabe,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - <  -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,146,OPERATION_ALU_L_SFNE    ,TYPE_ALU,0,0         ,0xdeadbeef,0x21524111,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - == + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,147,OPERATION_ALU_L_SFNE    ,TYPE_ALU,0,0         ,0xdeadbeef,0x11111111,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - >  + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,148,OPERATION_ALU_L_SFNE    ,TYPE_ALU,0,0         ,0xdeadbeef,0x33333333,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - <  + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,149,OPERATION_ALU_L_SFNE    ,TYPE_ALU,0,0         ,0x21524111,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + == - (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,150,OPERATION_ALU_L_SFNE    ,TYPE_ALU,0,0         ,0x33333333,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + >  - (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,151,OPERATION_ALU_L_SFNE    ,TYPE_ALU,0,0         ,0x11111111,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + <  - (in unsigned)
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,150,OPERATION_ALU_L_SFGEU   ,TYPE_ALU,0,0         ,0xdead    ,0xdead    ,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + == +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,151,OPERATION_ALU_L_SFGEU   ,TYPE_ALU,0,0         ,0x25071959,0x21071981,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + >  +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,152,OPERATION_ALU_L_SFGEU   ,TYPE_ALU,0,0         ,0x21071981,0x25071959,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + <  +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,153,OPERATION_ALU_L_SFGEU   ,TYPE_ALU,0,0         ,0xdeadbeef,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - == -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,154,OPERATION_ALU_L_SFGEU   ,TYPE_ALU,0,0         ,0xdeadbabe,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - >  -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,155,OPERATION_ALU_L_SFGEU   ,TYPE_ALU,0,0         ,0xdeadbeef,0xdeadbabe,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - <  -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,156,OPERATION_ALU_L_SFGEU   ,TYPE_ALU,0,0         ,0xdeadbeef,0x21524111,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - == + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,157,OPERATION_ALU_L_SFGEU   ,TYPE_ALU,0,0         ,0xdeadbeef,0x11111111,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - >  + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,158,OPERATION_ALU_L_SFGEU   ,TYPE_ALU,0,0         ,0xdeadbeef,0x33333333,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - <  + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,159,OPERATION_ALU_L_SFGEU   ,TYPE_ALU,0,0         ,0x21524111,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + == - (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,160,OPERATION_ALU_L_SFGEU   ,TYPE_ALU,0,0         ,0x33333333,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + >  - (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,161,OPERATION_ALU_L_SFGEU   ,TYPE_ALU,0,0         ,0x11111111,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + <  - (in unsigned)
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,170,OPERATION_ALU_L_SFGTU   ,TYPE_ALU,0,0         ,0xdead    ,0xdead    ,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + == +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,171,OPERATION_ALU_L_SFGTU   ,TYPE_ALU,0,0         ,0x25071959,0x21071981,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + >  +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,172,OPERATION_ALU_L_SFGTU   ,TYPE_ALU,0,0         ,0x21071981,0x25071959,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + <  +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,173,OPERATION_ALU_L_SFGTU   ,TYPE_ALU,0,0         ,0xdeadbeef,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - == -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,174,OPERATION_ALU_L_SFGTU   ,TYPE_ALU,0,0         ,0xdeadbabe,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - >  -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,175,OPERATION_ALU_L_SFGTU   ,TYPE_ALU,0,0         ,0xdeadbeef,0xdeadbabe,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - <  -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,176,OPERATION_ALU_L_SFGTU   ,TYPE_ALU,0,0         ,0xdeadbeef,0x21524111,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - == + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,177,OPERATION_ALU_L_SFGTU   ,TYPE_ALU,0,0         ,0xdeadbeef,0x11111111,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - >  + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,178,OPERATION_ALU_L_SFGTU   ,TYPE_ALU,0,0         ,0xdeadbeef,0x33333333,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - <  + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,179,OPERATION_ALU_L_SFGTU   ,TYPE_ALU,0,0         ,0x21524111,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + == - (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,180,OPERATION_ALU_L_SFGTU   ,TYPE_ALU,0,0         ,0x33333333,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + >  - (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,181,OPERATION_ALU_L_SFGTU   ,TYPE_ALU,0,0         ,0x11111111,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + <  - (in unsigned)
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,190,OPERATION_ALU_L_SFLEU   ,TYPE_ALU,0,0         ,0xdead    ,0xdead    ,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + == +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,191,OPERATION_ALU_L_SFLEU   ,TYPE_ALU,0,0         ,0x25071959,0x21071981,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + >  +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,192,OPERATION_ALU_L_SFLEU   ,TYPE_ALU,0,0         ,0x21071981,0x25071959,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + <  +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,193,OPERATION_ALU_L_SFLEU   ,TYPE_ALU,0,0         ,0xdeadbeef,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - == -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,194,OPERATION_ALU_L_SFLEU   ,TYPE_ALU,0,0         ,0xdeadbabe,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - >  -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,195,OPERATION_ALU_L_SFLEU   ,TYPE_ALU,0,0         ,0xdeadbeef,0xdeadbabe,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - <  -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,196,OPERATION_ALU_L_SFLEU   ,TYPE_ALU,0,0         ,0xdeadbeef,0x21524111,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - == + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,197,OPERATION_ALU_L_SFLEU   ,TYPE_ALU,0,0         ,0xdeadbeef,0x11111111,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - >  + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,198,OPERATION_ALU_L_SFLEU   ,TYPE_ALU,0,0         ,0xdeadbeef,0x33333333,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - <  + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,199,OPERATION_ALU_L_SFLEU   ,TYPE_ALU,0,0         ,0x21524111,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + == - (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,200,OPERATION_ALU_L_SFLEU   ,TYPE_ALU,0,0         ,0x33333333,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + >  - (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,201,OPERATION_ALU_L_SFLEU   ,TYPE_ALU,0,0         ,0x11111111,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + <  - (in unsigned)
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,210,OPERATION_ALU_L_SFLTU   ,TYPE_ALU,0,0         ,0xdead    ,0xdead    ,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + == +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,211,OPERATION_ALU_L_SFLTU   ,TYPE_ALU,0,0         ,0x25071959,0x21071981,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + >  +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,212,OPERATION_ALU_L_SFLTU   ,TYPE_ALU,0,0         ,0x21071981,0x25071959,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + <  +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,213,OPERATION_ALU_L_SFLTU   ,TYPE_ALU,0,0         ,0xdeadbeef,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - == -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,214,OPERATION_ALU_L_SFLTU   ,TYPE_ALU,0,0         ,0xdeadbabe,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - >  -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,215,OPERATION_ALU_L_SFLTU   ,TYPE_ALU,0,0         ,0xdeadbeef,0xdeadbabe,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - <  -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,216,OPERATION_ALU_L_SFLTU   ,TYPE_ALU,0,0         ,0xdeadbeef,0x21524111,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - == + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,217,OPERATION_ALU_L_SFLTU   ,TYPE_ALU,0,0         ,0xdeadbeef,0x11111111,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - >  + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,218,OPERATION_ALU_L_SFLTU   ,TYPE_ALU,0,0         ,0xdeadbeef,0x33333333,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - <  + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,219,OPERATION_ALU_L_SFLTU   ,TYPE_ALU,0,0         ,0x21524111,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + == - (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,220,OPERATION_ALU_L_SFLTU   ,TYPE_ALU,0,0         ,0x33333333,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + >  - (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,221,OPERATION_ALU_L_SFLTU   ,TYPE_ALU,0,0         ,0x11111111,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + <  - (in unsigned)
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,230,OPERATION_ALU_L_SFGES   ,TYPE_ALU,0,0         ,0xdead    ,0xdead    ,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + == +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,231,OPERATION_ALU_L_SFGES   ,TYPE_ALU,0,0         ,0x25071959,0x21071981,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + >  +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,232,OPERATION_ALU_L_SFGES   ,TYPE_ALU,0,0         ,0x21071981,0x25071959,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + <  +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,233,OPERATION_ALU_L_SFGES   ,TYPE_ALU,0,0         ,0xdeadbeef,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - == -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,234,OPERATION_ALU_L_SFGES   ,TYPE_ALU,0,0         ,0xdeadbabe,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - >  -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,235,OPERATION_ALU_L_SFGES   ,TYPE_ALU,0,0         ,0xdeadbeef,0xdeadbabe,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - <  -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,236,OPERATION_ALU_L_SFGES   ,TYPE_ALU,0,0         ,0xdeadbeef,0x21524111,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - == + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,237,OPERATION_ALU_L_SFGES   ,TYPE_ALU,0,0         ,0xdeadbeef,0x11111111,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - >  + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,238,OPERATION_ALU_L_SFGES   ,TYPE_ALU,0,0         ,0xdeadbeef,0x33333333,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - <  + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,239,OPERATION_ALU_L_SFGES   ,TYPE_ALU,0,0         ,0x21524111,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + == - (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,240,OPERATION_ALU_L_SFGES   ,TYPE_ALU,0,0         ,0x33333333,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + >  - (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,241,OPERATION_ALU_L_SFGES   ,TYPE_ALU,0,0         ,0x11111111,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + <  - (in unsigned)
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,250,OPERATION_ALU_L_SFGTS   ,TYPE_ALU,0,0         ,0xdead    ,0xdead    ,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + == +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,251,OPERATION_ALU_L_SFGTS   ,TYPE_ALU,0,0         ,0x25071959,0x21071981,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + >  +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,252,OPERATION_ALU_L_SFGTS   ,TYPE_ALU,0,0         ,0x21071981,0x25071959,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + <  +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,253,OPERATION_ALU_L_SFGTS   ,TYPE_ALU,0,0         ,0xdeadbeef,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - == -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,254,OPERATION_ALU_L_SFGTS   ,TYPE_ALU,0,0         ,0xdeadbabe,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - >  -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,255,OPERATION_ALU_L_SFGTS   ,TYPE_ALU,0,0         ,0xdeadbeef,0xdeadbabe,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - <  -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,256,OPERATION_ALU_L_SFGTS   ,TYPE_ALU,0,0         ,0xdeadbeef,0x21524111,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - == + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,257,OPERATION_ALU_L_SFGTS   ,TYPE_ALU,0,0         ,0xdeadbeef,0x11111111,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - >  + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,258,OPERATION_ALU_L_SFGTS   ,TYPE_ALU,0,0         ,0xdeadbeef,0x33333333,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - <  + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,259,OPERATION_ALU_L_SFGTS   ,TYPE_ALU,0,0         ,0x21524111,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + == - (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,260,OPERATION_ALU_L_SFGTS   ,TYPE_ALU,0,0         ,0x33333333,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + >  - (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,261,OPERATION_ALU_L_SFGTS   ,TYPE_ALU,0,0         ,0x11111111,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + <  - (in unsigned)
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,270,OPERATION_ALU_L_SFLES   ,TYPE_ALU,0,0         ,0xdead    ,0xdead    ,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + == +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,271,OPERATION_ALU_L_SFLES   ,TYPE_ALU,0,0         ,0x25071959,0x21071981,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + >  +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,272,OPERATION_ALU_L_SFLES   ,TYPE_ALU,0,0         ,0x21071981,0x25071959,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + <  +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,273,OPERATION_ALU_L_SFLES   ,TYPE_ALU,0,0         ,0xdeadbeef,0xdeadbeef,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - == -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,274,OPERATION_ALU_L_SFLES   ,TYPE_ALU,0,0         ,0xdeadbabe,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - >  -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,275,OPERATION_ALU_L_SFLES   ,TYPE_ALU,0,0         ,0xdeadbeef,0xdeadbabe,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - <  -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,276,OPERATION_ALU_L_SFLES   ,TYPE_ALU,0,0         ,0xdeadbeef,0x21524111,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - == + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,277,OPERATION_ALU_L_SFLES   ,TYPE_ALU,0,0         ,0xdeadbeef,0x11111111,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - >  + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,278,OPERATION_ALU_L_SFLES   ,TYPE_ALU,0,0         ,0xdeadbeef,0x33333333,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - <  + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,279,OPERATION_ALU_L_SFLES   ,TYPE_ALU,0,0         ,0x21524111,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + == - (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,280,OPERATION_ALU_L_SFLES   ,TYPE_ALU,0,0         ,0x33333333,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + >  - (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,281,OPERATION_ALU_L_SFLES   ,TYPE_ALU,0,0         ,0x11111111,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + <  - (in unsigned)
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,290,OPERATION_ALU_L_SFLTS   ,TYPE_ALU,0,0         ,0xdead    ,0xdead    ,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + == +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,291,OPERATION_ALU_L_SFLTS   ,TYPE_ALU,0,0         ,0x25071959,0x21071981,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + >  +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,292,OPERATION_ALU_L_SFLTS   ,TYPE_ALU,0,0         ,0x21071981,0x25071959,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + <  +
+  transaction_in.push_back(execute_transaction(_param,0,0,0,293,OPERATION_ALU_L_SFLTS   ,TYPE_ALU,0,0         ,0xdeadbeef,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - == -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,294,OPERATION_ALU_L_SFLTS   ,TYPE_ALU,0,0         ,0xdeadbabe,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - >  -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,295,OPERATION_ALU_L_SFLTS   ,TYPE_ALU,0,0         ,0xdeadbeef,0xdeadbabe,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - <  -
+  transaction_in.push_back(execute_transaction(_param,0,0,0,296,OPERATION_ALU_L_SFLTS   ,TYPE_ALU,0,0         ,0xdeadbeef,0x21524111,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - == + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,297,OPERATION_ALU_L_SFLTS   ,TYPE_ALU,0,0         ,0xdeadbeef,0x11111111,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - >  + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,298,OPERATION_ALU_L_SFLTS   ,TYPE_ALU,0,0         ,0xdeadbeef,0x33333333,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // - <  + (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,299,OPERATION_ALU_L_SFLTS   ,TYPE_ALU,0,0         ,0x21524111,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + == - (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,300,OPERATION_ALU_L_SFLTS   ,TYPE_ALU,0,0         ,0x33333333,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + >  - (in unsigned)
+  transaction_in.push_back(execute_transaction(_param,0,0,0,301,OPERATION_ALU_L_SFLTS   ,TYPE_ALU,0,0         ,0x11111111,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // + <  - (in unsigned)
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,400,OPERATION_ALU_L_MTSPR   ,TYPE_ALU,1,GROUP_ICACHE<<11,   3,0xdeadbeef,0              ,0,63,0xdeadbeef,0, 0,0              ,EXCEPTION_ALU_SPR_ACCESS_NOT_COMPLETE,0,(GROUP_ICACHE<<11)|   3));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,401,OPERATION_ALU_L_MTSPR   ,TYPE_ALU,1,GROUP_ICACHE<<11,   5,0xdeadbeef,0              ,0,63,0xdeadbeef,0, 0,0              ,EXCEPTION_ALU_SPR_ACCESS_NOT_COMPLETE,0,(GROUP_ICACHE<<11)|   5));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,402,OPERATION_ALU_L_MTSPR   ,TYPE_ALU,1,GROUP_MAC   <<11,   0,0xdeadbeef,0              ,0,63,0xdeadbeef,0, 0,0              ,EXCEPTION_ALU_SPR_ACCESS_INVALID     ,0,(GROUP_MAC   <<11)|   0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,403,OPERATION_ALU_L_MTSPR   ,TYPE_ALU,1,GROUP_MAC   <<11,   1,0xdeadbeef,0              ,0,63,0xdeadbeef,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_MAC   <<11)|   1));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,404,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_MAC   <<11,   0,0x12345678,0              ,1,63,0xdeadbeef,0, 0,0              ,EXCEPTION_ALU_SPR_ACCESS_INVALID     ,0,(GROUP_MAC   <<11)|   0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,405,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_MAC   <<11,   1,0x12345678,0              ,1,63,0xdeadbeef,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_MAC   <<11)|   1));
+
+  if (_param->_nb_ooo_engine > 1)
+    {
+  transaction_in.push_back(execute_transaction(_param,0,0,1,406,OPERATION_ALU_L_MTSPR   ,TYPE_ALU,1,GROUP_MAC   <<11,   1,0x12345678,0              ,0,63,0x12345678,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_MAC   <<11)|   1));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,407,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_MAC   <<11,   1,0x0       ,0              ,1,63,0xdeadbeef,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_MAC   <<11)|   1));
+  transaction_in.push_back(execute_transaction(_param,0,0,1,408,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_MAC   <<11,   1,0x0       ,0              ,1,63,0x12345678,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_MAC   <<11)|   1));
+    }
+  // TEST MAC Unit
+  transaction_in.push_back(execute_transaction(_param,0,0,0,409,OPERATION_ALU_L_MTSPR   ,TYPE_ALU,1,GROUP_MAC   <<11,   1,0xbebebeef,0              ,0,63,0xbebebeef,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_MAC   <<11)|   1));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,410,OPERATION_ALU_L_MTSPR   ,TYPE_ALU,1,GROUP_MAC   <<11,   2,0x21071981,0              ,0,63,0x21071981,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_MAC   <<11)|   2));
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,411,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_MAC   <<11,   1,0x0       ,0              ,1,63,0xbebebeef,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_MAC   <<11)|   1));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,412,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_MAC   <<11,   2,0x0       ,0              ,1,63,0x21071981,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_MAC   <<11)|   2));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,413,OPERATION_ALU_L_MACRC   ,TYPE_ALU,0,0x0       , 0x0      ,0x0       ,0              ,1,63,0xbebebeef,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0));
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,414,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_MAC   <<11,   1,0x0       ,0              ,1,63,0x0       ,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_MAC   <<11)|   1));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,415,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_MAC   <<11,   2,0x0       ,0              ,1,63,0x0       ,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_MAC   <<11)|   2));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,416,OPERATION_ALU_L_MACRC   ,TYPE_ALU,0,0x0       , 0x0      ,0x0       ,0              ,1,63,0x0       ,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0));
+
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,417,OPERATION_ALU_L_MAC     ,TYPE_ALU,0,0x0       ,0x22071981,0x1234567 ,0              ,0,63,0x0       ,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0));
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,418,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_MAC   <<11,   1,0x0       ,0              ,1,63,0x985e07e7,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_MAC   <<11)|   1));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,419,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_MAC   <<11,   2,0x0       ,0              ,1,63,0x0       ,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_MAC   <<11)|   2));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,420,OPERATION_ALU_L_MAC     ,TYPE_ALU,1,0x22071981,0x1234567 ,0x0       ,0              ,0,63,0x0       ,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0));
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,421,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_MAC   <<11,   1,0x0       ,0              ,1,63,0x30bc0fce,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_MAC   <<11)|   1));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,422,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_MAC   <<11,   2,0x0       ,0              ,1,63,0x1       ,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_MAC   <<11)|   2));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,423,OPERATION_ALU_L_MSB     ,TYPE_ALU,1,0xdeadbeef,0x1945    ,0x0       ,0              ,0,63,0x0       ,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0));
+  
+  transaction_in.push_back(execute_transaction(_param,0,0,0,424,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_MAC   <<11,   1,0x0       ,0              ,1,63,0x34424263,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_MAC   <<11)|   1));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,425,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_MAC   <<11,   2,0x0       ,0              ,1,63,0x0       ,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_MAC   <<11)|   2));
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,500,OPERATION_ALU_L_MTSPR   ,TYPE_ALU,1,GROUP_CUSTOM_3<<11, 0,0xdeadbeef,0              ,0,63,0xdeadbeef,0, 0,0              ,EXCEPTION_ALU_SPR_ACCESS_INVALID,0,(GROUP_CUSTOM_3<<11)|0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,500,OPERATION_ALU_L_MTSPR   ,TYPE_ALU,1,GROUP_CUSTOM_3<<11, 0,0xdeadbeef,0              ,0,63,0xdeadbeef,0, 1,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_3<<11)|0));
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,501,OPERATION_ALU_L_MTSPR   ,TYPE_ALU,1,GROUP_CUSTOM_3<<11, 1,0x3       ,0              ,0,63,0x3       ,0, 1,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_3<<11)|1));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,502,OPERATION_ALU_L_MTSPR   ,TYPE_ALU,1,GROUP_CUSTOM_3<<11, 2,0x7       ,0              ,0,63,0x7       ,0, 1,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_3<<11)|2));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,503,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_3<<11, 0,0x0       ,0              ,1,63,0xdeadbeef,0, 1,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_3<<11)|0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,504,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_3<<11, 1,0x0       ,0              ,1,63,0x3       ,0, 1,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_3<<11)|1));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,505,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_3<<11, 2,0x0       ,0              ,1,63,0x7       ,0, 1,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_3<<11)|2));
+
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,506,OPERATION_CUSTOM_L_4    ,TYPE_ALU,0,0x0       ,0x21071981,0x0       ,0              ,1,63,0x9ae2802f,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,507,OPERATION_CUSTOM_L_8    ,TYPE_ALU,0,0x0       ,0x9ae2802f,0x0       ,0              ,1,63,0x21071981,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0));
+
+
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,600,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 1,0x0       ,0              ,1,63,0xdeadbeef,0, 1,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|1));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,601,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 2,0x0       ,0              ,1,63,0x666     ,0, 2,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|2));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,602,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 3,0x0       ,0              ,1,63,0xffffffff,0, 3,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|3));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,603,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 3,0x0       ,0              ,0,63,0x0       ,0, 0,0              ,EXCEPTION_ALU_SPR_ACCESS_INVALID     ,0,(GROUP_CUSTOM_7<<11)|3));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,604,OPERATION_ALU_L_MTSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 2,0x0       ,0              ,0,63,0x0       ,0, 1,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|2));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,605,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 2,0x0       ,0              ,1,63,0x666     ,0, 2,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|2));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,606,OPERATION_ALU_L_MTSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 2,0x12345678,0              ,0,63,0x12345678,0, 1,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|2));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,607,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 2,0x0       ,0              ,1,63,0x12345678,0, 2,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|2));
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,610,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 0,0x0       ,0              ,1,63,0xbebe    ,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,611,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 0,0x0       ,0              ,1,63,0x4add6dda,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,612,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 0,0x0       ,0              ,1,63,0x96c7b0fe,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,613,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 0,0x0       ,0              ,1,63,0xeba5179a,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,614,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 0,0x0       ,0              ,1,63,0x17ebab3e,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,615,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 0,0x0       ,0              ,1,63,0xcd37395a,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,616,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 0,0x0       ,0              ,1,63,0x7325ad7e,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,617,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 0,0x0       ,0              ,1,63,0xb4ad31a ,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,618,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 0,0x0       ,0              ,1,63,0x5a4eb7be,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,619,OPERATION_ALU_L_MTSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 3,0xf       ,0              ,0,63,0xf       ,0, 1,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|3));
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,620,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 0,0x0       ,0              ,1,63,0xbd76e4da,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,621,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 0,0x0       ,0              ,1,63,0xe       ,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,622,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 0,0x0       ,0              ,1,63,0xa       ,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,623,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 0,0x0       ,0              ,1,63,0x3       ,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,624,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 0,0x0       ,0              ,1,63,0x1       ,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,625,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 0,0x0       ,0              ,1,63,0x5       ,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,626,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 0,0x0       ,0              ,1,63,0xc       ,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,627,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 0,0x0       ,0              ,1,63,0xe       ,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,628,OPERATION_ALU_L_MFSPR   ,TYPE_ALU,1,GROUP_CUSTOM_7<<11, 0,0x0       ,0              ,1,63,0xa       ,0, 0,0              ,EXCEPTION_ALU_NONE                   ,0,(GROUP_CUSTOM_7<<11)|0));
+
+  LABEL("Reset");
+  in_NRESET.write(0);
+
+  in_EXECUTE_IN_VAL .write(0);
+  in_EXECUTE_OUT_ACK.write(0);
+
+  SC_START(5);
+  in_NRESET.write(1);  
+
+  LABEL("Loop of Test");
+
+  for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
+    {
+      nb_transaction_out = transaction_in.size();
+
+      LABEL("Iteration %d",iteration);
+
+      while (nb_transaction_out > 0)
+	{
+	  Tcontrol_t val = ((rand()%100) < percent_transaction_execute_in) and not transaction_in.empty();
+	  in_EXECUTE_IN_VAL .write(val);
+	  in_EXECUTE_OUT_ACK.write((rand()%100) < percent_transaction_execute_out);
+	  
+	  if (val)
+	    {
+	      if (_param->_have_port_context_id)
+	      in_EXECUTE_IN_CONTEXT_ID    .write(transaction_in.front()._context_id   );
+	      if (_param->_have_port_front_end_id)
+	      in_EXECUTE_IN_FRONT_END_ID  .write(transaction_in.front()._front_end_id );
+	      if (_param->_have_port_ooo_engine_id)
+	      in_EXECUTE_IN_OOO_ENGINE_ID .write(transaction_in.front()._ooo_engine_id);
+	      if (_param->_have_port_packet_id)
+	      in_EXECUTE_IN_PACKET_ID     .write(transaction_in.front()._packet_id    );
+	      in_EXECUTE_IN_OPERATION     .write(transaction_in.front()._operation    );
+	      in_EXECUTE_IN_TYPE          .write(transaction_in.front()._type         );
+	      in_EXECUTE_IN_HAS_IMMEDIAT  .write(transaction_in.front()._has_immediat );
+	      in_EXECUTE_IN_IMMEDIAT      .write(transaction_in.front()._immediat     );
+	      in_EXECUTE_IN_DATA_RA       .write(transaction_in.front()._data_ra      );
+	      in_EXECUTE_IN_DATA_RB       .write(transaction_in.front()._data_rb      );
+	      in_EXECUTE_IN_DATA_RC       .write(transaction_in.front()._data_rc      );
+	      in_EXECUTE_IN_WRITE_RD      .write(transaction_in.front()._write_rd     );
+	      in_EXECUTE_IN_NUM_REG_RD    .write(transaction_in.front()._num_reg_rd   );
+	      in_EXECUTE_IN_WRITE_RE      .write(transaction_in.front()._write_re     );
+	      in_EXECUTE_IN_NUM_REG_RE    .write(transaction_in.front()._num_reg_re   );
+	    }
+	  
+	  SC_START(0);
+	  
+	  if (out_EXECUTE_OUT_VAL.read() and  in_EXECUTE_OUT_ACK.read())
+	    {
+	      // TEST
+	      if (_param->_have_port_packet_id)
+	      TEST(Tpacket_t         , out_EXECUTE_OUT_PACKET_ID    .read(), transaction_out.front()._packet_id    );
+	      if (_param->_have_port_context_id)
+	      TEST(Tcontext_t        , out_EXECUTE_OUT_CONTEXT_ID   .read(), transaction_out.front()._context_id   );
+	      if (_param->_have_port_front_end_id)
+	      TEST(Tcontext_t        , out_EXECUTE_OUT_FRONT_END_ID .read(), transaction_out.front()._front_end_id );
+	      if (_param->_have_port_ooo_engine_id)
+	      TEST(Tcontext_t        , out_EXECUTE_OUT_OOO_ENGINE_ID.read(), transaction_out.front()._ooo_engine_id);
+	    //TEST(Toperation_t      , out_EXECUTE_OUT_OPERATION    .read(), transaction_out.front()._operation    );
+	    //TEST(Ttype_t           , out_EXECUTE_OUT_TYPE         .read(), transaction_out.front()._type         );
+	      TEST(Tcontrol_t        , out_EXECUTE_OUT_WRITE_RE     .read(), transaction_out.front()._write_re     );
+	      TEST(Tgeneral_address_t, out_EXECUTE_OUT_NUM_REG_RD   .read(), transaction_out.front()._num_reg_rd   );
+	      TEST(Tspecial_address_t, out_EXECUTE_OUT_NUM_REG_RE   .read(), transaction_out.front()._num_reg_re   );
+	      TEST(Texception_t      , out_EXECUTE_OUT_EXCEPTION    .read(), transaction_out.front()._exception    );
+	      TEST(Tcontrol_t        , out_EXECUTE_OUT_NO_SEQUENCE  .read(), transaction_out.front()._no_sequence  );
+
+	      switch (transaction_out.front()._operation)
+		{
+		case OPERATION_ALU_L_MFSPR :
+		  {
+		    TEST(Tcontrol_t        , out_EXECUTE_OUT_WRITE_RD     .read(), out_EXECUTE_OUT_EXCEPTION.read() == EXCEPTION_ALU_NONE);
+		    if (out_EXECUTE_OUT_WRITE_RD     .read())
+		    TEST(Tgeneral_data_t   , out_EXECUTE_OUT_DATA_RD      .read(), transaction_out.front()._data_rd      );
+		    TEST(Tgeneral_data_t   , out_EXECUTE_OUT_ADDRESS      .read(), transaction_out.front()._address      );
+		    break;
+		  }
+		case OPERATION_ALU_L_MTSPR :
+		  {
+		    TEST(Tcontrol_t        , out_EXECUTE_OUT_WRITE_RD     .read(), transaction_out.front()._write_rd     );
+		    TEST(Tgeneral_data_t   , out_EXECUTE_OUT_DATA_RD      .read(), transaction_out.front()._data_rd      );
+		    TEST(Tgeneral_data_t   , out_EXECUTE_OUT_ADDRESS      .read(), transaction_out.front()._address      );
+		    break;
+		  }
+		default :
+		  {
+		    TEST(Tcontrol_t        , out_EXECUTE_OUT_WRITE_RD     .read(), transaction_out.front()._write_rd     );
+		    if (transaction_out.front()._write_rd)
+		    TEST(Tgeneral_data_t   , out_EXECUTE_OUT_DATA_RD      .read(), transaction_out.front()._data_rd      );
+		    if (transaction_out.front()._write_re)
+		    TEST(Tspecial_data_t   , out_EXECUTE_OUT_DATA_RE      .read(), transaction_out.front()._data_re      );
+		    if (transaction_out.front()._no_sequence)
+		    TEST(Tgeneral_data_t   , out_EXECUTE_OUT_ADDRESS      .read(), transaction_out.front()._address      );
+		  }
+		}
+	      transaction_out.pop_front();
+
+	      nb_transaction_out--;
+	    }
+	  
+	  if ( in_EXECUTE_IN_VAL .read() and out_EXECUTE_IN_ACK .read())
+	    {
+	      transaction_out.push_back(transaction_in.front());
+	      transaction_in.pop_front();
+	    }
+
+	  SC_START(1);
+	}
+
+    }
+  /********************************************************
+   * Simulation - End
+   ********************************************************/
+
+  TEST_OK ("End of Simulation");
+  delete _time;
+
+  msg(_("<%s> : ............ Stop Simulation\n"),name.c_str());
+
+#endif
+
+  delete _Functionnal_unit;
+#ifdef STATISTICS
+  delete _parameters_statistics;
+#endif
+}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/VERSION
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/VERSION	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/VERSION	(revision 72)
@@ -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/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/Functionnal_unit.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/Functionnal_unit.tex	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/Functionnal_unit.tex	(revision 72)
@@ -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/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/Makefile
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/Makefile	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/Makefile	(revision 72)
@@ -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/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/sty/header.sty
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/sty/header.sty	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/sty/header.sty	(revision 72)
@@ -0,0 +1,12 @@
+\def\review{YYYY/MM/DD}
+%\def\review{\number\day/\number\month/\number\year\xspace}
+
+\title{Functionnal_unit}
+ 
+\author{}
+
+\affiliation{}
+
+\email{}
+
+\date{\review}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/01_introduction.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/01_introduction.tex	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/01_introduction.tex	(revision 72)
@@ -0,0 +1,1 @@
+\Section{Introduction}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/02_features.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/02_features.tex	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/02_features.tex	(revision 72)
@@ -0,0 +1,1 @@
+\Section{Features}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/03_description.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/03_description.tex	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/03_description.tex	(revision 72)
@@ -0,0 +1,1 @@
+\Section{Functional Description}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/04_pinout.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/04_pinout.tex	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/04_pinout.tex	(revision 72)
@@ -0,0 +1,1 @@
+\Section{Pin out}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/05_parameters.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/05_parameters.tex	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/05_parameters.tex	(revision 72)
@@ -0,0 +1,1 @@
+\Section{Parameters}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/06_performance.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/06_performance.tex	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/06_performance.tex	(revision 72)
@@ -0,0 +1,1 @@
+\Section{Performance}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/07_details.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/07_details.tex	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/07_details.tex	(revision 72)
@@ -0,0 +1,1 @@
+\Section{Details}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/08_history.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/08_history.tex	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/08_history.tex	(revision 72)
@@ -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/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/root.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/root.tex	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/doc/tex/root.tex	(revision 72)
@@ -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/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h	(revision 72)
@@ -0,0 +1,191 @@
+#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_execute_unit_execute_unit_functionnal_unit_Functionnal_unit_h
+#define morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_execute_unit_execute_unit_functionnal_unit_Functionnal_unit_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ * This functionnal unit can treat an only request. also delay_global = max(latence, delay)
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Operation.h"
+
+#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/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Parameters.h"
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Types.h"
+#ifdef STATISTICS
+#include "Behavioural/include/Stat.h"
+#endif
+#include "Behavioural/include/Component.h"
+#ifdef VHDL
+#include "Behavioural/include/Vhdl.h"
+#endif
+#include "Behavioural/include/Usage.h"
+
+namespace morpheo {
+namespace behavioural {
+
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_execute_unit {
+namespace execute_unit {
+namespace functionnal_unit {
+
+
+  class Functionnal_unit 
+#if SYSTEMC
+    : public sc_module
+#endif
+  {
+    // -----[ fields ]----------------------------------------------------
+    // Parameters
+  protected : const std::string  _name;
+  protected : const Parameters * _param;
+  private   : const Tusage_t     _usage;
+
+#ifdef STATISTICS
+  private   : Stat                           * _stat;
+
+  private   : counter_t                      * _stat_use_functionnal_unit;
+  private   : counter_t                      * _stat_average_use_functionnal_unit;
+  private   : counter_t                      * _stat_percent_use_functionnal_unit;
+
+  private   : counter_t                      * _stat_sum_delay;
+  private   : counter_t                      * _stat_average_delay;
+
+  private   : counter_t                      * _stat_sum_latence;
+  private   : counter_t                      * _stat_average_latence;
+#endif
+
+  public    : Component                      * _component;
+  private   : Interfaces                     * _interfaces;
+
+#ifdef SYSTEMC
+    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    // Interface
+  public    : SC_CLOCK                      *  in_CLOCK        ;
+  public    : SC_IN (Tcontrol_t)            *  in_NRESET       ;
+
+    // ~~~~~[ Interface "execute_in" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_IN_VAL            ;
+  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_IN_ACK            ;
+  public    : SC_IN (Tcontext_t        )    *  in_EXECUTE_IN_CONTEXT_ID     ;
+  public    : SC_IN (Tcontext_t        )    *  in_EXECUTE_IN_FRONT_END_ID   ;
+  public    : SC_IN (Tcontext_t        )    *  in_EXECUTE_IN_OOO_ENGINE_ID  ;
+  public    : SC_IN (Tpacket_t         )    *  in_EXECUTE_IN_PACKET_ID      ;
+  public    : SC_IN (Toperation_t      )    *  in_EXECUTE_IN_OPERATION      ;
+  public    : SC_IN (Ttype_t           )    *  in_EXECUTE_IN_TYPE           ;
+  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_IN_HAS_IMMEDIAT   ;
+  public    : SC_IN (Tgeneral_data_t   )    *  in_EXECUTE_IN_IMMEDIAT       ;
+  public    : SC_IN (Tgeneral_data_t   )    *  in_EXECUTE_IN_DATA_RA        ;
+  public    : SC_IN (Tgeneral_data_t   )    *  in_EXECUTE_IN_DATA_RB        ;
+  public    : SC_IN (Tspecial_data_t   )    *  in_EXECUTE_IN_DATA_RC        ;
+  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_IN_WRITE_RD       ;
+  public    : SC_IN (Tgeneral_address_t)    *  in_EXECUTE_IN_NUM_REG_RD     ;
+  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_IN_WRITE_RE       ;
+  public    : SC_IN (Tspecial_address_t)    *  in_EXECUTE_IN_NUM_REG_RE     ;
+
+    // ~~~~~[ Interface "execute_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_OUT_VAL            ;
+  public    : SC_IN (Tcontrol_t        )    *  in_EXECUTE_OUT_ACK            ;
+  public    : SC_OUT(Tcontext_t        )    * out_EXECUTE_OUT_CONTEXT_ID     ;
+  public    : SC_OUT(Tcontext_t        )    * out_EXECUTE_OUT_FRONT_END_ID   ;
+  public    : SC_OUT(Tcontext_t        )    * out_EXECUTE_OUT_OOO_ENGINE_ID  ;
+  public    : SC_OUT(Tpacket_t         )    * out_EXECUTE_OUT_PACKET_ID      ;
+//public    : SC_OUT(Toperation_t      )    * out_EXECUTE_OUT_OPERATION      ;
+//public    : SC_OUT(Ttype_t           )    * out_EXECUTE_OUT_TYPE           ;
+  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_OUT_WRITE_RD       ;
+  public    : SC_OUT(Tgeneral_address_t)    * out_EXECUTE_OUT_NUM_REG_RD     ;
+  public    : SC_OUT(Tgeneral_data_t   )    * out_EXECUTE_OUT_DATA_RD        ;
+  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_OUT_WRITE_RE       ;
+  public    : SC_OUT(Tspecial_address_t)    * out_EXECUTE_OUT_NUM_REG_RE     ;
+  public    : SC_OUT(Tspecial_data_t   )    * out_EXECUTE_OUT_DATA_RE        ;
+  public    : SC_OUT(Texception_t      )    * out_EXECUTE_OUT_EXCEPTION      ;
+  public    : SC_OUT(Tcontrol_t        )    * out_EXECUTE_OUT_NO_SEQUENCE    ;
+  public    : SC_OUT(Tgeneral_data_t   )    * out_EXECUTE_OUT_ADDRESS        ;
+
+    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+
+    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+
+    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  private   : Tcontrol_t                      internal_EXECUTE_IN_ACK;
+  private   : Tcontrol_t                      internal_EXECUTE_OUT_VAL;
+  private   : bool                            reg_BUSY;
+
+  private   : execute_operation_t           * _execute_operation;
+  private   : execute_register_t         **** _execute_register;
+  private   : execute_param_t               * _execute_param;
+  private   : function_execute_t           ** _function_execute;
+#endif
+
+    // -----[ Methods ]---------------------------------------------------
+
+#ifdef SYSTEMC
+    SC_HAS_PROCESS (Functionnal_unit);
+#endif
+  public  :          Functionnal_unit              
+  (
+#ifdef SYSTEMC
+   sc_module_name                                name,
+#else					       
+   std::string                                   name,
+#endif					       
+#ifdef STATISTICS
+   morpheo::behavioural::Parameters_Statistics * param_statistics,
+#endif
+   Parameters                                  * param,
+   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   );
+  public  :             ~Functionnal_unit         (void);
+					       
+  private : void        allocation                (void);
+  private : void        deallocation              (void);
+					       
+#ifdef SYSTEMC
+  public  : void        transition                (void);
+  public  : void        genMoore                  (void);
+  public  : void        genMealy                  (void);
+
+
+#endif					       
+#ifdef STATISTICS
+  public  : void        statistics_declaration    (morpheo::behavioural::Parameters_Statistics * param_statistics);
+  public  : std::string statistics_print          (uint32_t depth);
+#endif
+					       
+#if VHDL				       
+  public  : void        vhdl                      (void);
+  private : void        vhdl_declaration          (Vhdl * & vhdl);
+  private : void        vhdl_body                 (Vhdl * & vhdl);
+#endif					       
+					       
+#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+  private : void        end_cycle                 (void);
+#endif
+
+  };
+
+  void operation_unimplemented   (execute_operation_t * op,
+				  execute_register_t  * reg);
+
+}; // end namespace functionnal_unit
+}; // end namespace execute_unit
+}; // end namespace multi_execute_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+}; // end namespace behavioural
+}; // end namespace morpheo              
+
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Operation.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Operation.h	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Operation.h	(revision 72)
@@ -0,0 +1,75 @@
+#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_execute_unit_execute_unit_functionnal_unit_operation_h
+#define morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_execute_unit_execute_unit_functionnal_unit_operation_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Common/include/ToString.h"
+#include "Common/include/Debug.h"
+#include "Common/include/ErrorMorpheo.h"
+#include "Behavioural/include/Types.h"
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Types.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_execute_unit {
+namespace execute_unit {
+namespace functionnal_unit {
+
+  void operation_unimplemented   (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_add           (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_addc          (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_sub           (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+//void operation_l_mul           (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+//void operation_l_mulu          (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+//void operation_l_div           (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+//void operation_l_divu          (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_and           (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_or            (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_xor           (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_test_f        (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_test_nf       (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_jalr          (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_sll           (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_sra           (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_srl           (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_ror           (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_movhi         (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_extend_s      (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_extend_z      (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_cmov          (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_ff1           (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_fl1           (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_mfspr         (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_mtspr         (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_sfeq          (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_sfne          (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_sfgeu         (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_sfgtu         (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_sfleu         (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_sfltu         (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_sfges         (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_sfgts         (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_sfles         (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_sflts         (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_mac           (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_msb           (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+  void operation_l_macrc         (execute_operation_t * op, execute_register_t  * reg, execute_param_t * param);
+
+}; // end namespace functionnal_unit
+}; // end namespace execute_unit
+}; // end namespace multi_execute_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+}; // end namespace behavioural
+}; // end namespace morpheo              
+
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Parameters.h	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Parameters.h	(revision 72)
@@ -0,0 +1,92 @@
+#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_execute_unit_execute_unit_functionnal_unit_Parameters_h
+#define morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_execute_unit_execute_unit_functionnal_unit_Parameters_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Common/include/Debug.h"
+#include "Behavioural/include/Parameters.h"
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Types.h"
+#include "Behavioural/Custom/include/Custom.h"
+#include <math.h>
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_execute_unit {
+namespace execute_unit {
+namespace functionnal_unit {
+
+
+  class Parameters : public morpheo::behavioural::Parameters
+  {
+    //-----[ fields ]------------------------------------------------------------
+  public : const uint32_t            _nb_context                   ;
+  public : const uint32_t            _nb_front_end                 ;
+  public : const uint32_t            _nb_ooo_engine                ;
+  public : const uint32_t            _nb_packet                    ;
+  public : const uint32_t            _size_general_data            ;
+  public : const uint32_t            _nb_general_register          ;
+  public : const uint32_t            _size_special_data            ;
+  public : const uint32_t            _nb_special_register          ;
+  public : const uint32_t            _nb_operation                 ;
+  public : const uint32_t            _nb_type                      ;
+  public : const execute_timing_t  * _timing                       ;
+  public : morpheo::behavioural::custom::custom_information_t (*_get_custom_information) (uint32_t);
+
+  public : const uint32_t            _size_context_id              ;
+  public : const uint32_t            _size_front_end_id            ;
+  public : const uint32_t            _size_ooo_engine_id           ;
+  public : const uint32_t            _size_packet_id               ;
+  public : const uint32_t            _size_general_register        ;
+  public : const uint32_t            _size_special_register        ;
+  public : const uint32_t            _size_operation               ;
+  public : const uint32_t            _size_type                    ;
+
+  public : const bool                _have_port_context_id         ;
+  public : const bool                _have_port_front_end_id       ;
+  public : const bool                _have_port_ooo_engine_id      ;
+  public : const bool                _have_port_packet_id          ;
+
+  public : const bool                _have_groupe_MAC              ;
+
+    //-----[ methods ]-----------------------------------------------------------
+  public : Parameters  (uint32_t           nb_context         ,
+			uint32_t           nb_front_end       ,
+			uint32_t           nb_ooo_engine      ,
+			uint32_t           nb_packet          ,
+			uint32_t           size_general_data  ,
+			uint32_t           nb_general_register,
+			uint32_t           size_special_data  ,
+			uint32_t           nb_special_register,
+			uint32_t           nb_operation       ,
+			uint32_t           nb_type            ,
+			execute_timing_t * timing             ,
+			morpheo::behavioural::custom::custom_information_t (*get_custom_information) (uint32_t));
+  public : Parameters  (Parameters & param) ;
+  public : ~Parameters () ;
+
+  public :        std::string   msg_error  (void);
+
+  public :        std::string   print      (uint32_t depth);
+  public : friend std::ostream& operator<< (std::ostream& output_stream,
+					  morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::Parameters & x);
+  };
+
+}; // end namespace functionnal_unit
+}; // end namespace execute_unit
+}; // end namespace multi_execute_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Types.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Types.h	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Types.h	(revision 72)
@@ -0,0 +1,166 @@
+#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_execute_unit_execute_unit_functionnal_unit_Types_h
+#define morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_execute_unit_execute_unit_functionnal_unit_Types_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#ifdef SYSTEMC
+#include "systemc.h"
+#endif
+
+#include "Common/include/BitManipulation.h"
+#include "Behavioural/include/SPR_access_mode.h"
+#include "Behavioural/include/Types.h"
+#include "Behavioural/include/Parameters.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_execute_unit {
+namespace execute_unit {
+namespace functionnal_unit {
+
+  class execute_timing_t
+  {
+    // if delay   > 0, can't accepted a transaction on EXECUTE_IN's  interface.
+  public : uint32_t        _delay  ;
+    // if latence > 0, can't initiate a transaction on EXECUTE_OUT's interface.
+  public : uint32_t        _latence;
+
+  public : execute_timing_t (uint32_t delay=0, uint32_t latence=0)
+    {
+      _delay   = delay;
+      _latence = latence;
+    };
+  };
+
+  typedef struct 
+  {
+    execute_timing_t   _timing      ;
+
+    Tcontext_t         _context_id   ;
+    Tcontext_t         _front_end_id ;
+    Tcontext_t         _ooo_engine_id;
+    Tpacket_t          _packet_id ;
+
+    Toperation_t       _operation   ;
+    Ttype_t            _type        ;
+    Tcontrol_t         _has_immediat;
+    Tgeneral_data_t    _immediat    ;
+    Tgeneral_data_t    _data_ra     ;
+    Tgeneral_data_t    _data_rb     ;
+    Tspecial_data_t    _data_rc     ;
+    Tgeneral_data_t    _data_rd     ;
+    Tspecial_data_t    _data_re     ;
+
+    Tcontrol_t         _write_rd  ;
+    Tgeneral_address_t _num_reg_rd;
+    Tcontrol_t         _write_re  ;
+    Tspecial_address_t _num_reg_re;
+
+    Texception_t       _exception   ;
+    Tcontrol_t         _no_sequence ;
+    Tgeneral_data_t    _address     ;
+  } execute_operation_t;
+
+  class execute_param_t
+  {
+  public : const uint32_t            _size_data;
+  public : const Tgeneral_data_t     _mask_data;
+  public : const Tgeneral_data_t     _mask_shift;
+  public : const execute_timing_t  * _timing;
+
+  public : execute_param_t (const uint32_t            size_data,
+			    const execute_timing_t  * timing):
+    _size_data (size_data),
+    _mask_data (gen_mask<Tgeneral_data_t> (size_data)),
+    _mask_shift(gen_mask<Tgeneral_data_t> (log2(size_data))),
+    _timing    (timing)
+    {
+    };
+  public : ~execute_param_t (void)
+    {
+    };
+  } ;
+
+  class execute_register_t
+  {
+    // information to custom group : 
+    //  * perhalps a custom group start an operation after a access at a internal's group register
+  public : bool               _i_read_spr;
+  public : bool               _i_write_spr;
+  public : uint32_t           _access_num_group;
+  public : uint32_t           _access_num_register;
+  public : Tgeneral_data_t    _spr_old;
+  public : Tgeneral_data_t ** _spr;
+  public : SPR_access_mode  * _spr_access_mode;
+    
+  public : execute_register_t (void)
+    {
+      _spr               = new Tgeneral_data_t * [NB_GROUP];
+      _spr_access_mode   = new SPR_access_mode;
+  
+      for (uint32_t i=0; i<NB_GROUP; i++)
+	{
+	  _spr               [i] = NULL;
+	}
+    }
+
+  public : ~execute_register_t (void)
+    {
+      for (uint32_t x=0; x<NB_GROUP; x++)
+	if (_spr[x] != NULL)
+	  delete _spr[x];
+      delete _spr;
+      delete _spr_access_mode;
+    }
+
+  public : void implement_group (uint32_t num_group, uint32_t nb_reg)
+    {
+      if ((num_group > NB_GROUP) or (_spr[num_group] != NULL))
+	throw ERRORMORPHEO("execute_register_t::implement_group", "Invalid group number or this group is already implemented.");
+
+      if (nb_reg > 0)
+	{
+	  _spr [num_group] = new Tgeneral_data_t [nb_reg];
+
+	  if (num_group >= GROUP_CUSTOM_1)
+	    _spr_access_mode ->implement_group(num_group, nb_reg);
+	}
+    }
+
+  public : void implement_group (uint32_t num_group)
+    {
+      if ((num_group > NB_GROUP) or (_spr[num_group] != NULL))
+	throw ERRORMORPHEO("execute_register_t::implement_group", "Invalid group number or this group is already implemented.");
+
+      uint32_t nb_reg = _spr_access_mode ->implement_group(num_group);
+
+      if (nb_reg > 0)
+	_spr [num_group] = new Tgeneral_data_t [nb_reg];
+    }
+  };
+  
+  typedef void function_execute_t (morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_operation_t *, 
+				   morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_register_t  *,
+				   morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_param_t     *);
+
+  typedef void function_execute_end_cycle_t (morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_register_t  *,
+					     morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_param_t     *);
+
+  
+}; // end namespace functionnal_unit
+}; // end namespace execute_unit
+}; // end namespace multi_execute_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit.cpp	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit.cpp	(revision 72)
@@ -0,0 +1,132 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_execute_unit {
+namespace execute_unit {
+namespace functionnal_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::Functionnal_unit"
+  Functionnal_unit::Functionnal_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::multi_execute_unit::execute_unit::functionnal_unit::Parameters * param,
+   morpheo::behavioural::Tusage_t usage
+   ):
+    _name              (name)
+    ,_param            (param)
+    ,_usage            (usage)
+  {
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"Begin");
+
+    log_printf(INFO,Functionnal_unit,FUNCTION,"Allocation");
+    allocation ();
+
+#ifdef STATISTICS
+    if (_usage & USE_STATISTICS)
+      {	
+	log_printf(INFO,Functionnal_unit,FUNCTION,"Allocation of statistics");
+
+	statistics_declaration(param_statistics);
+      }
+#endif
+
+#ifdef VHDL
+    if (_usage & USE_VHDL)
+      {
+	// generate the vhdl
+	log_printf(INFO,Functionnal_unit,FUNCTION,"Generate the vhdl");
+	
+	vhdl();
+      }
+#endif
+
+#ifdef SYSTEMC
+    if (_usage & USE_SYSTEMC)
+      {
+	log_printf(INFO,Functionnal_unit,FUNCTION,"Method - transition");
+
+	SC_METHOD (transition);
+	dont_initialize ();
+	sensitive << (*(in_CLOCK)).pos();
+	
+# ifdef SYSTEMCASS_SPECIFIC
+	// List dependency information
+# endif    
+
+	log_printf(INFO,Functionnal_unit,FUNCTION,"Method - genMoore");
+
+	SC_METHOD (genMoore);
+	dont_initialize ();
+	sensitive << (*(in_CLOCK)).neg();
+	
+# ifdef SYSTEMCASS_SPECIFIC
+	// List dependency information
+# endif    
+
+	log_printf(INFO,Functionnal_unit,FUNCTION,"Method - genMealy");
+
+	SC_METHOD (genMealy);
+	dont_initialize ();
+	sensitive << (*(in_CLOCK)).neg()
+		  << (*(in_EXECUTE_OUT_ACK));
+	
+# ifdef SYSTEMCASS_SPECIFIC
+	// List dependency information
+	(*(out_EXECUTE_IN_ACK)) (*(in_EXECUTE_OUT_ACK));
+# endif    
+	
+#endif
+      }
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"End");
+  };
+    
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::~Functionnal_unit"
+  Functionnal_unit::~Functionnal_unit (void)
+  {
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"Begin");
+
+#ifdef STATISTICS
+    if (_usage & USE_STATISTICS)
+      {
+	log_printf(INFO,Functionnal_unit,FUNCTION,"Generate Statistics file");
+	
+	delete _stat;
+      }
+#endif
+
+    log_printf(INFO,Functionnal_unit,FUNCTION,"Deallocation");
+    deallocation ();
+
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"End");
+  };
+
+}; // end namespace functionnal_unit
+}; // end namespace execute_unit
+}; // end namespace multi_execute_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/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_allocation.cpp	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_allocation.cpp	(revision 72)
@@ -0,0 +1,216 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_execute_unit {
+namespace execute_unit {
+namespace functionnal_unit {
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::allocation"
+  void Functionnal_unit::allocation (void)
+  {
+    string rename;
+
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"Begin");
+
+    _component   = new Component (_usage);
+
+    Entity * entity = _component->set_entity (_name       
+					      ,"Functionnal_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 : "execute_in" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+     {
+      Interface_fifo * interface = _interfaces->set_interface("execute_in"
+#ifdef POSITION
+							      ,IN
+							      ,WEST,
+							      "Input of Functionnal Unit"
+#endif
+							      );
+
+       in_EXECUTE_IN_VAL           = interface->set_signal_valack_in  (VAL);
+      out_EXECUTE_IN_ACK           = interface->set_signal_valack_out (ACK);
+      if (_param->_have_port_context_id)
+       in_EXECUTE_IN_CONTEXT_ID    = interface->set_signal_in <Tcontext_t        > ("context_id"   , _param->_size_context_id   );
+      if (_param->_have_port_front_end_id)
+       in_EXECUTE_IN_FRONT_END_ID  = interface->set_signal_in <Tcontext_t        > ("front_end_id" , _param->_size_front_end_id );
+      if (_param->_have_port_ooo_engine_id)
+       in_EXECUTE_IN_OOO_ENGINE_ID = interface->set_signal_in <Tcontext_t        > ("ooo_engine_id", _param->_size_ooo_engine_id);
+      if (_param->_have_port_packet_id)
+       in_EXECUTE_IN_PACKET_ID     = interface->set_signal_in <Tpacket_t         > ("packet_id"    , _param->_size_packet_id    );
+       in_EXECUTE_IN_OPERATION     = interface->set_signal_in <Toperation_t      > ("operation"    , _param->_size_operation    );
+       in_EXECUTE_IN_TYPE          = interface->set_signal_in <Ttype_t           > ("type"         , _param->_size_type         );
+       in_EXECUTE_IN_HAS_IMMEDIAT  = interface->set_signal_in <Tcontrol_t        > ("has_immediat" , 1);
+       in_EXECUTE_IN_IMMEDIAT      = interface->set_signal_in <Tgeneral_data_t   > ("immediat"     , _param->_size_general_data);
+       in_EXECUTE_IN_DATA_RA       = interface->set_signal_in <Tgeneral_data_t   > ("data_ra"      , _param->_size_general_data);
+       in_EXECUTE_IN_DATA_RB       = interface->set_signal_in <Tgeneral_data_t   > ("data_rb"      , _param->_size_general_data);
+       in_EXECUTE_IN_DATA_RC       = interface->set_signal_in <Tspecial_data_t   > ("data_rc"      , _param->_size_special_data);
+       in_EXECUTE_IN_WRITE_RD      = interface->set_signal_in <Tcontrol_t        > ("write_rd"     , 1);
+       in_EXECUTE_IN_NUM_REG_RD    = interface->set_signal_in <Tgeneral_address_t> ("num_reg_rd"   , _param->_size_general_register);
+       in_EXECUTE_IN_WRITE_RE      = interface->set_signal_in <Tcontrol_t        > ("write_re"     , 1);
+       in_EXECUTE_IN_NUM_REG_RE    = interface->set_signal_in <Tspecial_address_t> ("num_reg_re"   , _param->_size_special_register);
+     }
+    // ~~~~~[ Interface : "execute_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     
+     {
+       Interface_fifo * interface = _interfaces->set_interface("execute_out"
+#ifdef POSITION
+							       ,IN
+							       ,EAST,
+							       "Output of Functionnal Unit"
+#endif
+							       );
+
+       out_EXECUTE_OUT_VAL            = interface->set_signal_valack_out (VAL);
+        in_EXECUTE_OUT_ACK            = interface->set_signal_valack_in  (ACK);
+       if (_param->_have_port_context_id)
+       out_EXECUTE_OUT_CONTEXT_ID     = interface->set_signal_out<Tcontext_t        > ("context_id"   ,_param->_size_context_id   );
+       if (_param->_have_port_front_end_id)
+       out_EXECUTE_OUT_FRONT_END_ID   = interface->set_signal_out<Tcontext_t        > ("front_end_id" ,_param->_size_front_end_id );
+       if (_param->_have_port_ooo_engine_id)
+       out_EXECUTE_OUT_OOO_ENGINE_ID  = interface->set_signal_out<Tcontext_t        > ("ooo_engine_id",_param->_size_ooo_engine_id);
+       if (_param->_have_port_packet_id)
+       out_EXECUTE_OUT_PACKET_ID      = interface->set_signal_out<Tpacket_t         > ("packet_id"    ,_param->_size_packet_id    );
+     //out_EXECUTE_OUT_OPERATION      = interface->set_signal_out<Toperation_t      > ("operation"    ,_param->_size_operation    );
+     //out_EXECUTE_OUT_TYPE           = interface->set_signal_out<Ttype_t           > ("type"         ,_param->_size_type         );
+       out_EXECUTE_OUT_WRITE_RD       = interface->set_signal_out<Tcontrol_t        > ("write_rd"     ,1);
+       out_EXECUTE_OUT_NUM_REG_RD     = interface->set_signal_out<Tgeneral_address_t> ("num_reg_rd"   ,_param->_size_general_register);
+       out_EXECUTE_OUT_DATA_RD        = interface->set_signal_out<Tgeneral_data_t   > ("data_rd"      ,_param->_size_general_data);
+       out_EXECUTE_OUT_WRITE_RE       = interface->set_signal_out<Tcontrol_t        > ("write_re"     ,1);
+       out_EXECUTE_OUT_NUM_REG_RE     = interface->set_signal_out<Tspecial_address_t> ("num_reg_re"   ,_param->_size_special_register);
+       out_EXECUTE_OUT_DATA_RE        = interface->set_signal_out<Tspecial_data_t   > ("data_re"      ,_param->_size_special_data);
+       out_EXECUTE_OUT_EXCEPTION      = interface->set_signal_out<Texception_t      > ("exception"    ,_param->_size_exception);
+       out_EXECUTE_OUT_NO_SEQUENCE    = interface->set_signal_out<Tcontrol_t        > ("no_sequence"  ,1);
+       out_EXECUTE_OUT_ADDRESS        = interface->set_signal_out<Tgeneral_data_t   > ("address     " ,_param->_size_general_data);
+     }
+
+    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+     _execute_operation = new execute_operation_t;
+     _execute_param     = new execute_param_t(_param->_size_general_data,
+					      _param->_timing);
+
+     _execute_register = new execute_register_t *** [_param->_nb_context];
+
+     for (uint32_t i=0; i<_param->_nb_context; i++)
+       {
+	 _execute_register [i] = new execute_register_t ** [_param->_nb_front_end];
+	 
+	 for (uint32_t j=0; j<_param->_nb_front_end; j++)
+	   {
+	     _execute_register [i][j] = new execute_register_t * [_param->_nb_ooo_engine];
+	     
+	     for (uint32_t k=0; k<_param->_nb_ooo_engine; k++)
+	       {
+		 uint32_t num_thread = 0;
+
+		 _execute_register [i][j][k] = new execute_register_t;
+		 
+		 if (_param->_have_groupe_MAC)
+		   _execute_register[i][j][k]->implement_group(GROUP_MAC);
+
+		 for (uint32_t x=GROUP_CUSTOM_1; x<GROUP_CUSTOM_8; x++)
+		   if ((_param->_get_custom_information(num_thread))._get_valid_group(x) == true)
+		     {
+		       uint32_t nb_reg = (_param->_get_custom_information(num_thread))._get_nb_register(x);
+		       _execute_register[i][j][k]->implement_group(x,nb_reg);
+
+		       for (uint32_t y=0; y<nb_reg; y++)
+			 _execute_register[i][j][k]->_spr_access_mode->change_mode(x,y,(_param->_get_custom_information(num_thread))._get_access_mode(x,y));
+		     }
+	       }
+	   }
+       }
+
+     _function_execute = new function_execute_t * [MAX_OPERATION];
+     
+     // Initialisation
+     for (uint32_t i=0; i<MAX_OPERATION; i++)
+       _function_execute [i] = &(operation_unimplemented);
+
+     if (_param->_timing[OPERATION_ALU_L_ADD     ]._latence > 0) _function_execute[OPERATION_ALU_L_ADD     ] = &(operation_l_add     );
+     if (_param->_timing[OPERATION_ALU_L_ADDC    ]._latence > 0) _function_execute[OPERATION_ALU_L_ADDC    ] = &(operation_l_addc    );
+     if (_param->_timing[OPERATION_ALU_L_SUB     ]._latence > 0) _function_execute[OPERATION_ALU_L_SUB     ] = &(operation_l_sub     );
+//      if (_param->_timing[OPERATION_ALU_L_MUL     ]._latence > 0) _function_execute[OPERATION_ALU_L_MUL     ] = &(operation_l_mul     );
+//      if (_param->_timing[OPERATION_ALU_L_MULU    ]._latence > 0) _function_execute[OPERATION_ALU_L_MULU    ] = &(operation_l_mulu    );
+//      if (_param->_timing[OPERATION_ALU_L_DIV     ]._latence > 0) _function_execute[OPERATION_ALU_L_DIV     ] = &(operation_l_div     );
+//      if (_param->_timing[OPERATION_ALU_L_DIVU    ]._latence > 0) _function_execute[OPERATION_ALU_L_DIVU    ] = &(operation_l_divu    );
+     if (_param->_timing[OPERATION_ALU_L_AND     ]._latence > 0) _function_execute[OPERATION_ALU_L_AND     ] = &(operation_l_and     );
+     if (_param->_timing[OPERATION_ALU_L_OR      ]._latence > 0) _function_execute[OPERATION_ALU_L_OR      ] = &(operation_l_or      );
+     if (_param->_timing[OPERATION_ALU_L_XOR     ]._latence > 0) _function_execute[OPERATION_ALU_L_XOR     ] = &(operation_l_xor     );
+     if (_param->_timing[OPERATION_ALU_L_TEST_F  ]._latence > 0) _function_execute[OPERATION_ALU_L_TEST_F  ] = &(operation_l_test_f  );
+     if (_param->_timing[OPERATION_ALU_L_TEST_NF ]._latence > 0) _function_execute[OPERATION_ALU_L_TEST_NF ] = &(operation_l_test_nf );
+     if (_param->_timing[OPERATION_ALU_L_JALR    ]._latence > 0) _function_execute[OPERATION_ALU_L_JALR    ] = &(operation_l_jalr    );
+     if (_param->_timing[OPERATION_ALU_L_SLL     ]._latence > 0) _function_execute[OPERATION_ALU_L_SLL     ] = &(operation_l_sll     );
+     if (_param->_timing[OPERATION_ALU_L_SRA     ]._latence > 0) _function_execute[OPERATION_ALU_L_SRA     ] = &(operation_l_sra     );
+     if (_param->_timing[OPERATION_ALU_L_SRL     ]._latence > 0) _function_execute[OPERATION_ALU_L_SRL     ] = &(operation_l_srl     );
+     if (_param->_timing[OPERATION_ALU_L_ROR     ]._latence > 0) _function_execute[OPERATION_ALU_L_ROR     ] = &(operation_l_ror     );
+     if (_param->_timing[OPERATION_ALU_L_MOVHI   ]._latence > 0) _function_execute[OPERATION_ALU_L_MOVHI   ] = &(operation_l_movhi   );
+     if (_param->_timing[OPERATION_ALU_L_EXTEND_S]._latence > 0) _function_execute[OPERATION_ALU_L_EXTEND_S] = &(operation_l_extend_s);
+     if (_param->_timing[OPERATION_ALU_L_EXTEND_Z]._latence > 0) _function_execute[OPERATION_ALU_L_EXTEND_Z] = &(operation_l_extend_z);
+     if (_param->_timing[OPERATION_ALU_L_CMOV    ]._latence > 0) _function_execute[OPERATION_ALU_L_CMOV    ] = &(operation_l_cmov    ); 
+     if (_param->_timing[OPERATION_ALU_L_FF1     ]._latence > 0) _function_execute[OPERATION_ALU_L_FF1     ] = &(operation_l_ff1     ); 
+     if (_param->_timing[OPERATION_ALU_L_FL1     ]._latence > 0) _function_execute[OPERATION_ALU_L_FL1     ] = &(operation_l_fl1     ); 
+     if (_param->_timing[OPERATION_ALU_L_MFSPR   ]._latence > 0) _function_execute[OPERATION_ALU_L_MFSPR   ] = &(operation_l_mfspr   ); 
+     if (_param->_timing[OPERATION_ALU_L_MTSPR   ]._latence > 0) _function_execute[OPERATION_ALU_L_MTSPR   ] = &(operation_l_mtspr   ); 
+     if (_param->_timing[OPERATION_ALU_L_SFEQ    ]._latence > 0) _function_execute[OPERATION_ALU_L_SFEQ    ] = &(operation_l_sfeq    );
+     if (_param->_timing[OPERATION_ALU_L_SFNE    ]._latence > 0) _function_execute[OPERATION_ALU_L_SFNE    ] = &(operation_l_sfne    );
+     if (_param->_timing[OPERATION_ALU_L_SFGEU   ]._latence > 0) _function_execute[OPERATION_ALU_L_SFGEU   ] = &(operation_l_sfgeu   );
+     if (_param->_timing[OPERATION_ALU_L_SFGTU   ]._latence > 0) _function_execute[OPERATION_ALU_L_SFGTU   ] = &(operation_l_sfgtu   );
+     if (_param->_timing[OPERATION_ALU_L_SFLEU   ]._latence > 0) _function_execute[OPERATION_ALU_L_SFLEU   ] = &(operation_l_sfleu   );
+     if (_param->_timing[OPERATION_ALU_L_SFLTU   ]._latence > 0) _function_execute[OPERATION_ALU_L_SFLTU   ] = &(operation_l_sfltu   );
+     if (_param->_timing[OPERATION_ALU_L_SFGES   ]._latence > 0) _function_execute[OPERATION_ALU_L_SFGES   ] = &(operation_l_sfges   );
+     if (_param->_timing[OPERATION_ALU_L_SFGTS   ]._latence > 0) _function_execute[OPERATION_ALU_L_SFGTS   ] = &(operation_l_sfgts   );
+     if (_param->_timing[OPERATION_ALU_L_SFLES   ]._latence > 0) _function_execute[OPERATION_ALU_L_SFLES   ] = &(operation_l_sfles   );
+     if (_param->_timing[OPERATION_ALU_L_SFLTS   ]._latence > 0) _function_execute[OPERATION_ALU_L_SFLTS   ] = &(operation_l_sflts   );
+     if (_param->_timing[OPERATION_ALU_L_MAC     ]._latence > 0) _function_execute[OPERATION_ALU_L_MAC     ] = &(operation_l_mac     ); 
+     if (_param->_timing[OPERATION_ALU_L_MACRC   ]._latence > 0) _function_execute[OPERATION_ALU_L_MACRC   ] = &(operation_l_macrc   ); 
+     if (_param->_timing[OPERATION_ALU_L_MSB     ]._latence > 0) _function_execute[OPERATION_ALU_L_MSB     ] = &(operation_l_msb     ); 
+
+
+#ifdef POSITION
+    _component->generate_file();
+#endif
+
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"End");
+  };
+
+}; // end namespace functionnal_unit
+}; // end namespace execute_unit
+}; // end namespace multi_execute_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/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_deallocation.cpp	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_deallocation.cpp	(revision 72)
@@ -0,0 +1,95 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_execute_unit {
+namespace execute_unit {
+namespace functionnal_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::deallocation"
+  void Functionnal_unit::deallocation (void)
+  {
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"Begin");
+
+    if (_usage & USE_SYSTEMC)
+      {
+	delete    in_CLOCK ;
+	delete    in_NRESET;
+	
+	delete  in_EXECUTE_IN_VAL           ;
+	delete out_EXECUTE_IN_ACK           ;
+	if (_param->_have_port_context_id)
+	delete  in_EXECUTE_IN_CONTEXT_ID    ;
+	if (_param->_have_port_front_end_id)
+	delete  in_EXECUTE_IN_FRONT_END_ID  ;
+	if (_param->_have_port_ooo_engine_id)
+	delete  in_EXECUTE_IN_OOO_ENGINE_ID ;
+	if (_param->_have_port_packet_id)
+	delete  in_EXECUTE_IN_PACKET_ID     ;
+	delete  in_EXECUTE_IN_OPERATION     ;
+	delete  in_EXECUTE_IN_TYPE          ;
+	delete  in_EXECUTE_IN_HAS_IMMEDIAT  ;
+	delete  in_EXECUTE_IN_IMMEDIAT      ;
+	delete  in_EXECUTE_IN_DATA_RA       ;
+	delete  in_EXECUTE_IN_DATA_RB       ;
+	delete  in_EXECUTE_IN_DATA_RC       ;
+	delete  in_EXECUTE_IN_WRITE_RD      ;
+	delete  in_EXECUTE_IN_NUM_REG_RD    ;
+	delete  in_EXECUTE_IN_WRITE_RE      ;
+	delete  in_EXECUTE_IN_NUM_REG_RE    ;
+
+	delete out_EXECUTE_OUT_VAL            ;
+	delete  in_EXECUTE_OUT_ACK            ;
+	if (_param->_have_port_context_id)
+	delete out_EXECUTE_OUT_CONTEXT_ID     ; 
+	if (_param->_have_port_front_end_id)
+	delete out_EXECUTE_OUT_FRONT_END_ID   ; 
+	if (_param->_have_port_ooo_engine_id)
+	delete out_EXECUTE_OUT_OOO_ENGINE_ID  ; 
+	if (_param->_have_port_packet_id)
+	delete out_EXECUTE_OUT_PACKET_ID      ; 
+      //delete out_EXECUTE_OUT_OPERATION      ; 
+      //delete out_EXECUTE_OUT_TYPE           ; 
+	delete out_EXECUTE_OUT_WRITE_RD       ; 
+	delete out_EXECUTE_OUT_NUM_REG_RD     ; 
+	delete out_EXECUTE_OUT_DATA_RD        ; 
+	delete out_EXECUTE_OUT_WRITE_RE       ; 
+	delete out_EXECUTE_OUT_NUM_REG_RE     ; 
+	delete out_EXECUTE_OUT_DATA_RE        ;
+	delete out_EXECUTE_OUT_EXCEPTION      ;
+	delete out_EXECUTE_OUT_NO_SEQUENCE    ;
+	delete out_EXECUTE_OUT_ADDRESS        ;
+      }
+    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+
+    delete [] _execute_register;
+    delete    _execute_param;
+    delete    _execute_operation;
+    delete    _function_execute;
+
+    delete    _component;
+
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"End");
+  };
+
+}; // end namespace functionnal_unit
+}; // end namespace execute_unit
+}; // end namespace multi_execute_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/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_end_cycle.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_end_cycle.cpp	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_end_cycle.cpp	(revision 72)
@@ -0,0 +1,49 @@
+#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_execute_unit {
+namespace execute_unit {
+namespace functionnal_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::end_cycle"
+void Functionnal_unit::end_cycle ()
+  {
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"Begin");
+
+#ifdef STATISTICS
+    _stat->end_cycle();
+#endif    
+
+#ifdef VHDL_TESTBENCH
+    // Evaluation before read the ouput signal
+//  sc_start(0);
+    _interfaces->testbench();
+#endif
+
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"End");
+  };
+
+}; // end namespace functionnal_unit
+}; // end namespace execute_unit
+}; // end namespace multi_execute_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_genMealy.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_genMealy.cpp	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_genMealy.cpp	(revision 72)
@@ -0,0 +1,46 @@
+#ifdef SYSTEMC
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_execute_unit {
+namespace execute_unit {
+namespace functionnal_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::genMealy"
+  void Functionnal_unit::genMealy (void)
+  {
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"Begin");
+
+    bool execute_out_transaction = (PORT_READ(in_EXECUTE_OUT_ACK) and
+				    (reg_BUSY and (_execute_operation->_timing._latence == 0)));
+
+    internal_EXECUTE_IN_ACK = not reg_BUSY or (reg_BUSY and execute_out_transaction);
+
+    PORT_WRITE(out_EXECUTE_IN_ACK, internal_EXECUTE_IN_ACK);
+
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"End");
+  };
+
+}; // end namespace functionnal_unit
+}; // end namespace execute_unit
+}; // end namespace multi_execute_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_genMoore.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_genMoore.cpp	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_genMoore.cpp	(revision 72)
@@ -0,0 +1,62 @@
+#ifdef SYSTEMC
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_execute_unit {
+namespace execute_unit {
+namespace functionnal_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::genMealy"
+  void Functionnal_unit::genMoore (void)
+  {
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"Begin");
+
+    internal_EXECUTE_OUT_VAL = reg_BUSY and (_execute_operation->_timing._latence == 0);
+
+    PORT_WRITE(out_EXECUTE_OUT_VAL          , internal_EXECUTE_OUT_VAL);
+    if (_param->_have_port_context_id)
+    PORT_WRITE(out_EXECUTE_OUT_CONTEXT_ID   ,_execute_operation->_context_id   );
+    if (_param->_have_port_front_end_id)
+    PORT_WRITE(out_EXECUTE_OUT_FRONT_END_ID ,_execute_operation->_front_end_id );
+    if (_param->_have_port_ooo_engine_id)
+    PORT_WRITE(out_EXECUTE_OUT_OOO_ENGINE_ID,_execute_operation->_ooo_engine_id);
+    if (_param->_have_port_packet_id)
+    PORT_WRITE(out_EXECUTE_OUT_PACKET_ID    ,_execute_operation->_packet_id    );
+  //PORT_WRITE(out_EXECUTE_OUT_OPERATION    ,_execute_operation->_operation    );
+  //PORT_WRITE(out_EXECUTE_OUT_TYPE         ,_execute_operation->_type         );
+    PORT_WRITE(out_EXECUTE_OUT_WRITE_RD     ,_execute_operation->_write_rd     );
+    PORT_WRITE(out_EXECUTE_OUT_NUM_REG_RD   ,_execute_operation->_num_reg_rd   );
+    PORT_WRITE(out_EXECUTE_OUT_DATA_RD      ,_execute_operation->_data_rd      );
+    PORT_WRITE(out_EXECUTE_OUT_WRITE_RE     ,_execute_operation->_write_re     );
+    PORT_WRITE(out_EXECUTE_OUT_NUM_REG_RE   ,_execute_operation->_num_reg_re   );
+    PORT_WRITE(out_EXECUTE_OUT_DATA_RE      ,_execute_operation->_data_re      );
+    PORT_WRITE(out_EXECUTE_OUT_EXCEPTION    ,_execute_operation->_exception    );
+    PORT_WRITE(out_EXECUTE_OUT_NO_SEQUENCE  ,_execute_operation->_no_sequence  );
+    PORT_WRITE(out_EXECUTE_OUT_ADDRESS      ,_execute_operation->_address      );
+
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"End");
+  };
+
+}; // end namespace functionnal_unit
+}; // end namespace execute_unit
+}; // end namespace multi_execute_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_statistics_declaration.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_statistics_declaration.cpp	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_statistics_declaration.cpp	(revision 72)
@@ -0,0 +1,58 @@
+#ifdef STATISTICS
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_execute_unit {
+namespace execute_unit {
+namespace functionnal_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::statistics_declaration"
+  void Functionnal_unit::statistics_declaration (morpheo::behavioural::Parameters_Statistics * param_statistics)
+  {
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"Begin");
+
+    _stat = new Stat (static_cast<string>(_name),
+		      "Functionnal_unit",
+		      param_statistics);
+
+    _stat_use_functionnal_unit         = _stat->create_variable("use_functionnal_unit");
+    _stat_average_use_functionnal_unit = _stat->create_counter ("average_use_functionnal_unit", "" , "Average by cycle of the functionnal_unit occupation.");
+    _stat_percent_use_functionnal_unit = _stat->create_counter ("percent_use_functionnal_unit", "%", "Percent of functionnal_unit usage.");
+
+    _stat->create_expr("average_use_functionnal_unit", "/ use_functionnal_unit cycle"      , false);
+    _stat->create_expr("percent_use_functionnal_unit", "* average_use_functionnal_unit 100", false);
+
+    _stat_sum_delay                    = _stat->create_variable("sum_delay");
+    _stat_average_delay                = _stat->create_counter ("average_delay"               , "" , "Average by operation of the delay.");
+    _stat_sum_latence                  = _stat->create_variable("sum_latence");
+    _stat_average_latence              = _stat->create_counter ("average_latence"             , "" , "Average by operation of the latence.");
+
+    _stat->create_expr("average_delay"               , "/ sum_delay   use_functionnal_unit", false);
+    _stat->create_expr("average_latence"             , "/ sum_latence use_functionnal_unit", false);
+
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"End");
+  };
+
+}; // end namespace functionnal_unit
+}; // end namespace execute_unit
+}; // end namespace multi_execute_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_statistics_print.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_statistics_print.cpp	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_statistics_print.cpp	(revision 72)
@@ -0,0 +1,43 @@
+#ifdef STATISTICS
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_execute_unit {
+namespace execute_unit {
+namespace functionnal_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::statistics_print"
+  std::string Functionnal_unit::statistics_print (uint32_t depth)
+  {
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"Begin");
+
+    std::string txt = _stat->print(depth);
+    
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"End");
+
+    return txt;
+  };
+
+}; // end namespace functionnal_unit
+}; // end namespace execute_unit
+}; // end namespace multi_execute_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_transition.cpp	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_transition.cpp	(revision 72)
@@ -0,0 +1,164 @@
+#ifdef SYSTEMC
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_execute_unit {
+namespace execute_unit {
+namespace functionnal_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::transition"
+  void Functionnal_unit::transition (void)
+  {
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"Begin");
+
+    if (PORT_READ(in_NRESET) == 0)
+      {
+	reg_BUSY = false;
+	
+	for (uint32_t i=0; i<_param->_nb_context; i++)
+	  for (uint32_t j=0; j<_param->_nb_front_end; j++)
+	    for (uint32_t k=0; k<_param->_nb_ooo_engine; k++)
+	      {
+		uint32_t num_thread = 0;
+		
+		for (uint32_t x=GROUP_CUSTOM_1; x<GROUP_CUSTOM_8; x++)
+		  {
+		    function_execute_end_cycle_t * fct = (_param->_get_custom_information(num_thread)._get_custom_execute_reset(x));
+		    
+		    if (fct != NULL)
+		      (* fct) (_execute_register[i][j][k], _execute_param);
+		  }
+	      }
+      }
+    else
+      {
+	// Test if pop
+	if (internal_EXECUTE_OUT_VAL and PORT_READ(in_EXECUTE_OUT_ACK))
+	  {
+	    // transaction
+	    reg_BUSY = false;
+	  }
+	
+	// Test if push
+	execute_register_t * execute_register = NULL;
+
+	if (PORT_READ(in_EXECUTE_IN_VAL) and internal_EXECUTE_IN_ACK)
+	  {
+	    reg_BUSY = true;
+
+	    Tcontext_t context_id    = (_param->_have_port_context_id   )?PORT_READ(in_EXECUTE_IN_CONTEXT_ID   ):0;
+	    Tcontext_t front_end_id  = (_param->_have_port_front_end_id )?PORT_READ(in_EXECUTE_IN_FRONT_END_ID ):0;
+	    Tcontext_t ooo_engine_id = (_param->_have_port_ooo_engine_id)?PORT_READ(in_EXECUTE_IN_OOO_ENGINE_ID):0;
+	    Tcontext_t packet_id     = (_param->_have_port_packet_id    )?PORT_READ(in_EXECUTE_IN_PACKET_ID    ):0;
+	    Toperation_t operation = PORT_READ(in_EXECUTE_IN_OPERATION);
+
+	    _execute_operation->_context_id    = context_id   ;
+	    _execute_operation->_front_end_id  = front_end_id ;
+	    _execute_operation->_ooo_engine_id = ooo_engine_id;
+	    _execute_operation->_packet_id     = packet_id    ;
+	    _execute_operation->_operation     = operation    ;
+	    _execute_operation->_type          = PORT_READ(in_EXECUTE_IN_TYPE        );
+	    _execute_operation->_has_immediat  = PORT_READ(in_EXECUTE_IN_HAS_IMMEDIAT);
+	    _execute_operation->_immediat      = PORT_READ(in_EXECUTE_IN_IMMEDIAT    );
+	    _execute_operation->_data_ra       = PORT_READ(in_EXECUTE_IN_DATA_RA     );
+	    _execute_operation->_data_rb       = PORT_READ(in_EXECUTE_IN_DATA_RB     );
+	    _execute_operation->_data_rc       = PORT_READ(in_EXECUTE_IN_DATA_RC     );
+	    _execute_operation->_write_rd      = PORT_READ(in_EXECUTE_IN_WRITE_RD    );
+	    _execute_operation->_num_reg_rd    = PORT_READ(in_EXECUTE_IN_NUM_REG_RD  );
+	    _execute_operation->_write_re      = PORT_READ(in_EXECUTE_IN_WRITE_RE    );
+	    _execute_operation->_num_reg_re    = PORT_READ(in_EXECUTE_IN_NUM_REG_RE  );
+
+#ifdef DEBUG_TEST
+	    if (operation >= MAX_OPERATION)
+	      throw ERRORMORPHEO(FUNCTION,"Invalid operation : '"+toString(operation)+"' is higher that MAX_OPERATION");
+#endif
+
+	    // execute the operation
+ 	    execute_register = _execute_register[context_id][front_end_id][ooo_engine_id];
+
+	    // Test if operation is a custom
+	    if ((operation == OPERATION_CUSTOM_L_1) or
+		(operation == OPERATION_CUSTOM_L_2) or
+		(operation == OPERATION_CUSTOM_L_3) or
+		(operation == OPERATION_CUSTOM_L_4) or
+		(operation == OPERATION_CUSTOM_L_5) or
+		(operation == OPERATION_CUSTOM_L_6) or
+		(operation == OPERATION_CUSTOM_L_7) or
+		(operation == OPERATION_CUSTOM_L_8))
+	      {
+		uint32_t num_thread = 0;
+
+		(*(_param->_get_custom_information(num_thread)._get_custom_execute_genMoore(operation))) (_execute_operation, execute_register, _execute_param);
+	      }
+	    else
+	      (*(_function_execute[operation])) (_execute_operation, execute_register, _execute_param);
+
+
+#ifdef STATISTICS
+            (*_stat_use_functionnal_unit) ++;
+	    (*_stat_sum_delay)   += _execute_operation->_timing._delay;
+	    (*_stat_sum_latence) += _execute_operation->_timing._latence;
+#endif
+	  }
+	
+	// End cycle
+	{
+	  for (uint32_t i=0; i<_param->_nb_context; i++)
+	    for (uint32_t j=0; j<_param->_nb_front_end; j++)
+	      for (uint32_t k=0; k<_param->_nb_ooo_engine; k++)
+		{
+		  uint32_t num_thread = 0;
+		  
+		  for (uint32_t x=GROUP_CUSTOM_1; x<GROUP_CUSTOM_8; x++)
+		    {
+		      function_execute_end_cycle_t * fct = (_param->_get_custom_information(num_thread)._get_custom_execute_transition(x));
+		      
+		      if (fct != NULL)
+			(* fct) (_execute_register[i][j][k], _execute_param);
+		    }
+		}
+
+	  // Update status
+	  if (execute_register != NULL)
+	    {
+	      // They have an access
+	      execute_register->_i_write_spr = false;
+	      execute_register->_i_read_spr  = false;
+	    }
+	}
+      }
+
+    // each cycle : decrease the latence
+    if (reg_BUSY and (_execute_operation->_timing._latence > 0))
+      _execute_operation->_timing._latence --;
+
+#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+    end_cycle ();
+#endif
+
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"End");
+  };
+
+}; // end namespace functionnal_unit
+}; // end namespace execute_unit
+}; // end namespace multi_execute_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_vhdl.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_vhdl.cpp	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_vhdl.cpp	(revision 72)
@@ -0,0 +1,52 @@
+#ifdef VHDL
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h"
+#include "Behavioural/include/Vhdl.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_execute_unit {
+namespace execute_unit {
+namespace functionnal_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::vhdl"
+  void Functionnal_unit::vhdl (void)
+  {
+    log_printf(FUNC,Functionnal_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,Functionnal_unit,FUNCTION,"End");
+  };
+
+}; // end namespace functionnal_unit
+}; // end namespace execute_unit
+}; // end namespace multi_execute_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_vhdl_body.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_vhdl_body.cpp	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_vhdl_body.cpp	(revision 72)
@@ -0,0 +1,39 @@
+#ifdef VHDL
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_execute_unit {
+namespace execute_unit {
+namespace functionnal_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::vhdl_body"
+  void Functionnal_unit::vhdl_body (Vhdl * & vhdl)
+  {
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"Begin");
+    vhdl->set_body ("");
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"End");
+  };
+
+}; // end namespace functionnal_unit
+}; // end namespace execute_unit
+}; // end namespace multi_execute_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_vhdl_declaration.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_vhdl_declaration.cpp	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_vhdl_declaration.cpp	(revision 72)
@@ -0,0 +1,38 @@
+#ifdef VHDL
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_execute_unit {
+namespace execute_unit {
+namespace functionnal_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::vhdl_declaration"
+  void Functionnal_unit::vhdl_declaration (Vhdl * & vhdl)
+  {
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"Begin");
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"End");
+  };
+
+}; // end namespace functionnal_unit
+}; // end namespace execute_unit
+}; // end namespace multi_execute_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Operation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Operation.cpp	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Operation.cpp	(revision 72)
@@ -0,0 +1,836 @@
+#ifdef SYSTEMC
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Operation.h"
+
+#define neg(data)                  (~(data)+1)
+#define sign(data)                 ((data)>>(param->_size_data-1))
+#define unsigned(data)             (data)
+#define signed(data)               ((sign(data)==0)?(data):neg(data))
+#define ovf(op1, op2, res)         ((sign(op1) == sign(op2))?(sign(op1) xor sign(res)):0)
+#define carry(op1, op2, res)       (((res)<(op1)) or ((res)<(op2)))
+#define set_flag(data,flag,is_set) (((is_set)==1)?((data)|(flag)):((data)&~(flag)))
+#define get_flag(data,flag)	   (((data)&(flag))!=0)
+#define concatenation_bool(a,b)    (((a)<<1) | (b))
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_execute_unit {
+namespace execute_unit {
+namespace functionnal_unit {
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_unimplemented"
+  void operation_unimplemented (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : unimplemented");
+
+    throw ERRORMORPHEO(FUNCTION,"The operation '"+toString(op->_operation)+"' is not implemented in this Functionnal_unit");
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_add"
+  void operation_l_add         (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_add");
+
+    Tgeneral_data_t gpr1      = unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2      = unsigned((op->_has_immediat==1)?op->_immediat:op->_data_rb);
+    
+    Tgeneral_data_t gpr3      = param->_mask_data & (gpr1 + gpr2);
+
+    bool            overflow  = ovf  (gpr1,gpr2,gpr3);
+    bool            carry_out = carry(gpr1,gpr2,gpr3);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+    op->_data_rd      = gpr3;
+    op->_data_re      = 0;
+    op->_data_re      = set_flag(op->_data_re,FLAG_OV,overflow );
+    op->_data_re      = set_flag(op->_data_re,FLAG_CY,carry_out);
+    op->_exception    = (overflow==1)?EXCEPTION_ALU_RANGE:EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_addc"
+  void operation_l_addc        (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_addc");
+
+    Tgeneral_data_t carry_in   = get_flag(op->_data_rc,FLAG_CY);
+
+    Tgeneral_data_t gpr1       = unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2       = unsigned((op->_has_immediat==1)?op->_immediat:op->_data_rb);
+    Tgeneral_data_t gpr3       = param->_mask_data & (gpr1 + gpr2 + carry_in);
+
+    bool            overflow   = ovf  (gpr1,gpr2,gpr3);
+    bool            carry_out  = carry(gpr1,gpr2,gpr3);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+    op->_data_rd      = gpr3;
+    op->_data_re      = 0;
+    op->_data_re      = set_flag(op->_data_re,FLAG_OV,overflow );
+    op->_data_re      = set_flag(op->_data_re,FLAG_CY,carry_out);
+    op->_exception    = (overflow==1)?EXCEPTION_ALU_RANGE:EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_sub"
+  void operation_l_sub         (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_sub");
+
+    Tgeneral_data_t gpr1      =     unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2      = neg(unsigned(op->_data_rb));
+    Tgeneral_data_t gpr3      = param->_mask_data & (gpr1 + gpr2);
+
+    bool            overflow  = ovf  (gpr1,gpr2,gpr3);
+    bool            carry_out = carry(gpr1,gpr2,gpr3);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+    op->_data_rd      = gpr3;
+    op->_data_re      = 0;
+    op->_data_re      = set_flag(op->_data_re,FLAG_OV,overflow );
+    op->_data_re      = set_flag(op->_data_re,FLAG_CY,carry_out);
+    op->_exception    = (overflow==1)?EXCEPTION_ALU_RANGE:EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_and"
+  void operation_l_and         (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_and");
+
+    Tgeneral_data_t gpr1       = unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2       = unsigned((op->_has_immediat==1)?op->_immediat:op->_data_rb);
+    Tgeneral_data_t gpr3       = (gpr1 & gpr2);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+    op->_data_rd      = gpr3;
+  //op->_data_re      = 0;
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_or"
+  void operation_l_or          (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_or");
+
+    Tgeneral_data_t gpr1       = unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2       = unsigned((op->_has_immediat==1)?op->_immediat:op->_data_rb);
+    Tgeneral_data_t gpr3       = (gpr1 | gpr2);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+    op->_data_rd      = gpr3;
+  //op->_data_re      = 0;
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_xor"
+  void operation_l_xor         (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_xor");
+
+    Tgeneral_data_t gpr1       = unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2       = unsigned((op->_has_immediat==1)?op->_immediat:op->_data_rb);
+    Tgeneral_data_t gpr3       = (gpr1 ^ gpr2);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+    op->_data_rd      = gpr3;
+  //op->_data_re      = 0;
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_movhi"
+  void operation_l_movhi       (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_movhi");
+
+    Tgeneral_data_t gpr1       = unsigned(op->_immediat);
+    Tgeneral_data_t gpr2       = param->_mask_data & (gpr1<<16);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+    op->_data_rd      = gpr2;
+  //op->_data_re      = 0;
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_cmov"
+  void operation_l_cmov        (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_cmov");
+
+    Tgeneral_data_t f_in       = get_flag(op->_data_rc,FLAG_F);
+
+    Tgeneral_data_t gpr1       = unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2       = unsigned(op->_data_rb);
+    Tgeneral_data_t gpr3       = ((f_in==0)?gpr2:gpr1);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+    op->_data_rd      = gpr3;
+  //op->_data_re      = 0;
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_test_f"
+  void operation_l_test_f      (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_test_f");
+
+    Tgeneral_data_t f_in       = get_flag(op->_data_rc,FLAG_F);
+    Tgeneral_data_t imm        = unsigned(op->_immediat);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+  //op->_data_rd      = 0;
+  //op->_data_re      = 0;
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = f_in != 0;
+    op->_address      = imm;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_test_nf"
+  void operation_l_test_nf     (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_test_nf");
+
+    Tgeneral_data_t f_in       = get_flag(op->_data_rc,FLAG_F);
+    Tgeneral_data_t imm        = unsigned(op->_immediat);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+  //op->_data_rd      = 0;
+  //op->_data_re      = 0;
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = f_in == 0;
+    op->_address      = imm;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_jalr"
+  void operation_l_jalr        (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_jalr");
+    // jal  : has_imm = 1, write_rd = 1, read_rb = 0
+    // jalr : has_imm = 1, write_rd = 1, read_rb = 1
+    // jr   : has_imm = 0, write_rd = 0, read_rb = 1
+
+
+    Tgeneral_data_t gpr        = unsigned(op->_data_rb);
+    Tgeneral_data_t imm        = unsigned(op->_immediat);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+    op->_data_rd      = imm;
+  //op->_data_re      = 0;
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 1;
+    op->_address      = gpr;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_extend_s"
+  void operation_l_extend_s    (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_extend_s");
+
+    Tgeneral_data_t imm        = unsigned(op->_immediat);
+    Tgeneral_data_t gpr1       = unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2       = extend<Tgeneral_data_t>(param->_size_data, gpr1, true , imm);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+    op->_data_rd      = gpr2;
+  //op->_data_re      = 0;
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_extend_z"
+  void operation_l_extend_z    (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_extend_z");
+
+    Tgeneral_data_t imm        = unsigned(op->_immediat);
+    Tgeneral_data_t gpr1       = unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2       = extend<Tgeneral_data_t>(param->_size_data, gpr1, false , imm);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+    op->_data_rd      = gpr2;
+  //op->_data_re      = 0;
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_sll"
+  void operation_l_sll         (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_sll");
+
+    Tgeneral_data_t gpr1       = unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2       = param->_mask_shift & unsigned((op->_has_immediat==1)?op->_immediat:op->_data_rb);
+    Tgeneral_data_t gpr3       = shift_logic_left<Tgeneral_data_t>(param->_size_data, gpr1, gpr2);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+    op->_data_rd      = gpr3;
+  //op->_data_re      = 0;
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_srl"
+  void operation_l_srl         (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_srl");
+
+    Tgeneral_data_t gpr1       = unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2       = param->_mask_shift & unsigned((op->_has_immediat==1)?op->_immediat:op->_data_rb);
+    Tgeneral_data_t gpr3       = shift_logic_right<Tgeneral_data_t>(param->_size_data, gpr1, gpr2);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+    op->_data_rd      = gpr3;
+  //op->_data_re      = 0;
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_sra"
+  void operation_l_sra         (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_sra");
+
+    Tgeneral_data_t gpr1       = unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2       = param->_mask_shift & unsigned((op->_has_immediat==1)?op->_immediat:op->_data_rb);
+    Tgeneral_data_t gpr3       = shift_arithmetic_right<Tgeneral_data_t>(param->_size_data, gpr1, gpr2);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+    op->_data_rd      = gpr3;
+  //op->_data_re      = 0;
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_ror"
+  void operation_l_ror         (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_ror");
+
+    Tgeneral_data_t gpr1       = unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2       = param->_mask_shift & unsigned((op->_has_immediat==1)?op->_immediat:op->_data_rb);
+    Tgeneral_data_t gpr3       = rotate_right<Tgeneral_data_t>(param->_size_data, gpr1, gpr2);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+    op->_data_rd      = gpr3;
+  //op->_data_re      = 0;
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_ff1"
+  void operation_l_ff1         (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_ff1");
+
+    Tgeneral_data_t gpr        = unsigned(op->_data_ra);
+    Tgeneral_data_t index;
+
+    for (index=0; (index<param->_size_data) and (((gpr>>index)&1)!= 1); index++);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+    op->_data_rd      = (index==param->_size_data)?0:(index+1);
+  //op->_data_re      = 0;
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_fl1"
+  void operation_l_fl1         (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_fl1");
+
+    Tgeneral_data_t gpr        = unsigned(op->_data_ra);
+    Tgeneral_data_t index;
+
+    for (index=param->_size_data; (index>0) and (((gpr>>(index-1))&1)!= 1); index--);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+    op->_data_rd      = index;
+  //op->_data_re      = 0;
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_sfeq"
+  void operation_l_sfeq        (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_sfeq");
+
+    Tgeneral_data_t gpr1       = unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2       = unsigned((op->_has_immediat==1)?op->_immediat:op->_data_rb);
+
+    bool            f_out      = (gpr1 == gpr2);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+  //op->_data_rd      = 0;
+    op->_data_re      = set_flag(op->_data_re,FLAG_F,f_out);
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_sfne"
+  void operation_l_sfne        (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_sfne");
+
+    Tgeneral_data_t gpr1       = unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2       = unsigned((op->_has_immediat==1)?op->_immediat:op->_data_rb);
+
+    bool            f_out      = (gpr1 != gpr2);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+  //op->_data_rd      = 0;
+    op->_data_re      = set_flag(op->_data_re,FLAG_F,f_out);
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_sfgeu"
+  void operation_l_sfgeu       (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_sfgeu");
+
+    Tgeneral_data_t gpr1       = unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2       = unsigned((op->_has_immediat==1)?op->_immediat:op->_data_rb);
+
+    bool            f_out      = (gpr1 >= gpr2);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+  //op->_data_rd      = 0;
+    op->_data_re      = set_flag(op->_data_re,FLAG_F,f_out);
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_sfgtu"
+  void operation_l_sfgtu       (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_sfgtu");
+
+    Tgeneral_data_t gpr1       = unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2       = unsigned((op->_has_immediat==1)?op->_immediat:op->_data_rb);
+
+    bool            f_out      = (gpr1 >  gpr2);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+  //op->_data_rd      = 0;
+    op->_data_re      = set_flag(op->_data_re,FLAG_F,f_out);
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_sfleu"
+  void operation_l_sfleu       (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_sfleu");
+
+    Tgeneral_data_t gpr1       = unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2       = unsigned((op->_has_immediat==1)?op->_immediat:op->_data_rb);
+
+    bool            f_out      = (gpr1 <= gpr2);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+  //op->_data_rd      = 0;
+    op->_data_re      = set_flag(op->_data_re,FLAG_F,f_out);
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_sfltu"
+  void operation_l_sfltu       (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_sfltu");
+
+    Tgeneral_data_t gpr1       = unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2       = unsigned((op->_has_immediat==1)?op->_immediat:op->_data_rb);
+
+    bool            f_out      = (gpr1 <  gpr2);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+  //op->_data_rd      = 0;
+    op->_data_re      = set_flag(op->_data_re,FLAG_F,f_out);
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_sfges"
+  void operation_l_sfges       (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_sfges");
+
+    Tgeneral_data_t gpr1       =   op->_data_ra;
+    Tgeneral_data_t gpr2       =   (op->_has_immediat==1)?op->_immediat:op->_data_rb;
+    
+    log_printf(TRACE,Functionnal_unit,FUNCTION," * data_ra  : %.8x",unsigned(op->_data_ra));
+    log_printf(TRACE,Functionnal_unit,FUNCTION," * data_ras : %.8x",  signed(op->_data_ra));
+    log_printf(TRACE,Functionnal_unit,FUNCTION," * data_rb  : %.8x",unsigned((op->_has_immediat==1)?op->_immediat:op->_data_rb));
+    log_printf(TRACE,Functionnal_unit,FUNCTION," * data_rbs : %.8x",  signed((op->_has_immediat==1)?op->_immediat:op->_data_rb));
+    
+    bool            f_out;
+
+    switch (concatenation_bool(sign(gpr1),sign(gpr2)))
+      {
+      case 1 /*b01*/ : f_out = 1                               ; break;
+      case 2 /*b10*/ : f_out = 0                               ; break;
+      default        : f_out = signed(gpr1) >= signed(gpr2); break;
+      }
+
+    log_printf(TRACE,Functionnal_unit,FUNCTION," * f_out    : %.8x",f_out);
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+  //op->_data_rd      = 0;
+    op->_data_re      = set_flag(op->_data_re,FLAG_F,f_out);
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_sfgts"
+  void operation_l_sfgts       (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_sfgts");
+
+    Tgeneral_data_t gpr1       = op->_data_ra ;
+    Tgeneral_data_t gpr2       = (op->_has_immediat==1)?op->_immediat:op->_data_rb ;
+
+    bool            f_out;
+
+    switch (concatenation_bool(sign(gpr1),sign(gpr2)))
+      {
+      case 1 /*b01*/ : f_out = 1; break;
+      case 2 /*b10*/ : f_out = 0; break;
+      default        : f_out = signed(gpr1) >  signed(gpr2); break;
+      }
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+  //op->_data_rd      = 0;
+    op->_data_re      = set_flag(op->_data_re,FLAG_F,f_out);
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_sfles"
+  void operation_l_sfles       (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_sfles");
+
+    Tgeneral_data_t gpr1       = op->_data_ra ;
+    Tgeneral_data_t gpr2       = (op->_has_immediat==1)?op->_immediat:op->_data_rb ;
+
+    bool            f_out;
+
+    switch (concatenation_bool(sign(gpr1),sign(gpr2)))
+      {
+      case 1 /*b01*/ : f_out = 0; break;
+      case 2 /*b10*/ : f_out = 1; break;
+      default        : f_out = signed(gpr1) <= signed(gpr2); break;
+      }
+    
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+  //op->_data_rd      = 0;
+    op->_data_re      = set_flag(op->_data_re,FLAG_F,f_out);
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_sflts"
+  void operation_l_sflts       (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_sflts");
+
+    Tgeneral_data_t gpr1       = op->_data_ra ;
+    Tgeneral_data_t gpr2       = (op->_has_immediat==1)?op->_immediat:op->_data_rb;
+
+    bool            f_out;
+
+    switch (concatenation_bool(sign(gpr1),sign(gpr2)))
+      {
+      case 1 /*b01*/ : f_out = 0; break;
+      case 2 /*b10*/ : f_out = 1; break;
+      default        : f_out = signed(gpr1) <  signed(gpr2); break;
+      }
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+  //op->_data_rd      = 0;
+    op->_data_re      = set_flag(op->_data_re,FLAG_F,f_out);
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_mtspr"
+  void operation_l_mtspr       (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_mtspr");
+
+    Tgeneral_data_t imm        = unsigned(op->_immediat);
+    Tgeneral_data_t gpr1       = unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2       = unsigned(op->_data_rb);
+    Tgeneral_data_t addr       = range<Tgeneral_data_t>(gpr1|imm,16);
+
+    Texception_t    exception;
+
+    // HACK : use the field num_reg_re to pass the SM and SUMRA flag.
+    Tcontrol_t      flag_SM    = get_flag(op->_num_reg_re, 0x1);
+    Tcontrol_t      flag_SUMRA = get_flag(op->_num_reg_re, 0x2);
+
+    spr_address_t   spr_addr   = reg->_spr_access_mode->translate_address(addr);
+    
+    // Test if this group is implemented in this functionnal_unit
+    if (reg->_spr_access_mode->valid(spr_addr))
+      {
+	if (reg->_spr_access_mode->write(spr_addr, flag_SM, flag_SUMRA))
+	  {
+	    reg->_i_write_spr         = true;
+	    reg->_access_num_group    = spr_addr._group;
+	    reg->_access_num_register = spr_addr._register;
+	    reg->_spr_old             = reg->_spr[spr_addr._group][spr_addr._register];
+	    reg->_spr[spr_addr._group][spr_addr._register] = gpr2;
+
+	    exception = EXCEPTION_ALU_NONE;
+	  }
+	else
+	  {
+	    exception = EXCEPTION_ALU_SPR_ACCESS_INVALID;
+	  }
+      }
+    else
+      {
+	exception = EXCEPTION_ALU_SPR_ACCESS_NOT_COMPLETE;
+      }
+    
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+    op->_data_rd      = gpr2; // data_rb
+  //op->_data_re      = 0;
+    op->_exception    = exception;
+    op->_no_sequence  = 0;
+    op->_address      = addr; // data_ra or imm
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_mfspr"
+  void operation_l_mfspr       (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_mfspr");
+
+    Tgeneral_data_t imm        = unsigned(op->_immediat);
+    Tgeneral_data_t gpr1       = unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2       = 0;
+    Tgeneral_data_t addr       = range<Tgeneral_data_t>(gpr1|imm,16);
+
+    Texception_t    exception;
+
+    // HACK : use the field num_reg_re to pass the SM and SUMRA flag.
+    Tcontrol_t      flag_SM    = get_flag(op->_num_reg_re, 0x1);
+    Tcontrol_t      flag_SUMRA = get_flag(op->_num_reg_re, 0x2);
+
+    spr_address_t   spr_addr   = reg->_spr_access_mode->translate_address(addr);
+    
+    // Test if this group is implemented in this functionnal_unit
+    if (reg->_spr_access_mode->valid(spr_addr))
+      {
+	if (reg->_spr_access_mode->read(spr_addr, flag_SM, flag_SUMRA))
+	  {
+	    reg->_i_read_spr          = true;
+	    reg->_access_num_group    = spr_addr._group;
+	    reg->_access_num_register = spr_addr._register;
+	    
+	    gpr2 = reg->_spr[spr_addr._group][spr_addr._register];
+
+	    exception = EXCEPTION_ALU_NONE;
+	  }
+	else
+	  {
+	    exception = EXCEPTION_ALU_SPR_ACCESS_INVALID;
+	  }
+      }
+    else
+      {
+	exception = EXCEPTION_ALU_SPR_ACCESS_NOT_COMPLETE;
+      }
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+    op->_write_rd     = (exception == EXCEPTION_ALU_NONE);
+    op->_data_rd      = gpr2; // spr
+  //op->_data_re      = 0;
+    op->_exception    = exception;
+    op->_no_sequence  = 0;
+    op->_address      = addr; // data_ra or imm
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_macrc"
+  void operation_l_macrc        (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_macrc");
+
+    Tgeneral_data_t gpr = static_cast<Tgeneral_data_t>(range<uint64_t>((static_cast<uint64_t>(reg->_spr[GROUP_MAC][SPR_MACHI]) << 32) | static_cast<uint64_t>(reg->_spr[GROUP_MAC][SPR_MACLO]), param->_size_data));
+
+    reg->_spr[GROUP_MAC][SPR_MACLO] = 0;
+    reg->_spr[GROUP_MAC][SPR_MACHI] = 0;
+
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+    op->_data_rd      = gpr;
+  //op->_data_re      = 0;
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_mac"
+  void operation_l_mac          (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_mac");
+
+    Tgeneral_data_t gpr1 = unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2 = unsigned((op->_has_immediat==1)?op->_immediat:op->_data_rb);
+    uint64_t        temp = range<uint64_t>(gpr1 * gpr2, 32);
+
+    temp = ((static_cast<uint64_t>(reg->_spr[GROUP_MAC][SPR_MACHI]) << 32) | static_cast<uint64_t>(reg->_spr[GROUP_MAC][SPR_MACLO])) + temp;
+
+    reg->_spr[GROUP_MAC][SPR_MACLO] = range<Tgeneral_data_t>(temp    ,32);
+    reg->_spr[GROUP_MAC][SPR_MACHI] = range<Tgeneral_data_t>(temp>>32,32);
+    
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+  //op->_data_rd      = 0;
+  //op->_data_re      = 0;
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_msb"
+  void operation_l_msb          (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_msb");
+
+    Tgeneral_data_t gpr1 = unsigned(op->_data_ra);
+    Tgeneral_data_t gpr2 = unsigned((op->_has_immediat==1)?op->_immediat:op->_data_rb);
+    uint64_t        temp = range<uint64_t>(gpr1 * gpr2, 32);
+
+    temp = ((static_cast<uint64_t>(reg->_spr[GROUP_MAC][SPR_MACHI]) << 32) | static_cast<uint64_t>(reg->_spr[GROUP_MAC][SPR_MACLO])) - temp;
+
+    reg->_spr[GROUP_MAC][SPR_MACLO] = range<Tgeneral_data_t>(temp    ,32);
+    reg->_spr[GROUP_MAC][SPR_MACHI] = range<Tgeneral_data_t>(temp>>32,32);
+    
+    // Result
+    op->_timing       = param->_timing[op->_operation];
+  //op->_data_rd      = 0;
+  //op->_data_re      = 0;
+    op->_exception    = EXCEPTION_ALU_NONE;
+    op->_no_sequence  = 0;
+  //op->_address      = 0;
+  };
+
+}; // end namespace functionnal_unit
+}; // end namespace execute_unit
+}; // end namespace multi_execute_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Parameters.cpp	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Parameters.cpp	(revision 72)
@@ -0,0 +1,127 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Parameters.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_execute_unit {
+namespace execute_unit {
+namespace functionnal_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::Parameters"
+  Parameters::Parameters (uint32_t           nb_context         ,
+			  uint32_t           nb_front_end       ,
+			  uint32_t           nb_ooo_engine      ,
+			  uint32_t           nb_packet          ,
+			  uint32_t           size_general_data  ,
+			  uint32_t           nb_general_register,
+			  uint32_t           size_special_data  ,
+			  uint32_t           nb_special_register,
+			  uint32_t           nb_operation       ,
+			  uint32_t           nb_type            ,
+			  execute_timing_t * timing             ,
+			  morpheo::behavioural::custom::custom_information_t (*get_custom_information) (uint32_t)) :
+    _nb_context              (nb_context            ),
+    _nb_front_end            (nb_front_end          ),
+    _nb_ooo_engine           (nb_ooo_engine         ),
+    _nb_packet               (nb_packet             ),
+    _size_general_data       (size_general_data     ),
+    _nb_general_register     (nb_general_register   ),
+    _size_special_data       (size_special_data     ),
+    _nb_special_register     (nb_special_register   ),
+    _nb_operation            (nb_operation          ),
+    _nb_type                 (nb_type               ),
+    _timing                  (timing                ),
+    
+    _size_context_id         (log2(nb_context      )),
+    _size_front_end_id       (log2(nb_front_end    )),
+    _size_ooo_engine_id      (log2(nb_ooo_engine   )),
+    _size_packet_id          (log2(nb_packet       )),
+    _size_general_register   (log2(_size_general_register)),
+    _size_special_register   (log2(_size_special_register)),
+    _size_operation          (log2(_size_operation       )),
+    _size_type               (log2(_size_type            )),
+
+    _have_port_context_id    (_size_context_id    > 0),
+    _have_port_front_end_id  (_size_front_end_id  > 0),
+    _have_port_ooo_engine_id (_size_ooo_engine_id > 0),
+    _have_port_packet_id     (_size_packet_id     > 0),
+
+    _have_groupe_MAC         ( (_timing[OPERATION_ALU_L_MAC  ]._latence > 0) or
+			       (_timing[OPERATION_ALU_L_MACRC]._latence > 0) or
+			       (_timing[OPERATION_ALU_L_MSB  ]._latence > 0))
+  {
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"Begin");
+
+    _get_custom_information = get_custom_information;
+
+    test();
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"End");
+  };
+  
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::Parameters (copy)"
+  Parameters::Parameters (Parameters & param):
+    _nb_context              (param._nb_context             ),
+    _nb_front_end            (param._nb_front_end           ),
+    _nb_ooo_engine           (param._nb_ooo_engine          ),
+    _nb_packet               (param._nb_packet              ),
+    _size_general_data       (param._size_general_data      ),
+    _nb_general_register     (param._nb_general_register    ),
+    _size_special_data       (param._size_special_data      ),
+    _nb_special_register     (param._nb_special_register    ),
+    _nb_operation            (param._nb_operation           ),
+    _nb_type                 (param._nb_type                ),
+    _timing                  (param._timing                 ),
+
+    _size_context_id         (param._size_context_id        ),
+    _size_front_end_id       (param._size_front_end_id      ),
+    _size_ooo_engine_id      (param._size_ooo_engine_id     ),
+    _size_packet_id          (param._size_packet_id         ),
+    _size_general_register   (param._size_general_register  ),
+    _size_special_register   (param._size_special_register  ),
+    _size_operation          (param._size_operation         ),
+    _size_type               (param._size_type              ),
+
+    _have_port_context_id    (param._have_port_context_id   ),
+    _have_port_front_end_id  (param._have_port_front_end_id ),
+    _have_port_ooo_engine_id (param._have_port_ooo_engine_id),
+    _have_port_packet_id     (param._have_port_packet_id    ),
+
+    _have_groupe_MAC         (param._have_groupe_MAC        )
+  {
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"Begin");
+
+    _get_custom_information = param._get_custom_information;
+
+    test();
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"End");
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::~Parameters"
+  Parameters::~Parameters () 
+  {
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"Begin");
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"End");
+  };
+
+}; // end namespace functionnal_unit
+}; // end namespace execute_unit
+}; // end namespace multi_execute_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/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Parameters_msg_error.cpp	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Parameters_msg_error.cpp	(revision 72)
@@ -0,0 +1,51 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Types.h"
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Parameters.h"
+#include <sstream>
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_execute_unit {
+namespace execute_unit {
+namespace functionnal_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::msg_error"
+  std::string Parameters::msg_error(void)
+  {
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"Begin");
+
+    std::string msg = "";
+
+    for (uint32_t i=0; i<MAX_OPERATION; i++)
+      if (_timing->_delay != _timing->_latence)
+	msg = "  - For the operation '"+toString(i)+"', the delay and the latence must be equal.";
+
+    if (_have_groupe_MAC and ((_timing[OPERATION_ALU_L_MAC  ]._latence == 0) or
+			      (_timing[OPERATION_ALU_L_MACRC]._latence == 0) or
+			      (_timing[OPERATION_ALU_L_MSB  ]._latence == 0)))
+      msg = "  - The functionnal unit implement a MAC unit, the latence to operation OPERATION_ALU_L_MAC, OPERATION_ALU_L_MACRC and OPERATION_ALU_L_MSB must be higher than 0.";
+
+    return msg;
+
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"End");
+  };
+
+}; // end namespace functionnal_unit
+}; // end namespace execute_unit
+}; // end namespace multi_execute_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/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Parameters_print.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Parameters_print.cpp	(revision 72)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Parameters_print.cpp	(revision 72)
@@ -0,0 +1,67 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Parameters.h"
+#include "Behavioural/include/XML.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_execute_unit {
+namespace execute_unit {
+namespace functionnal_unit {
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::print"
+  std::string Parameters::print (uint32_t depth)
+  {
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"Begin");
+
+    XML xml ("functionnal_unit");
+
+    xml.balise_open("functionnal_unit");
+    xml.singleton_begin("nb_context         "); xml.attribut("value",toString(_nb_context         )); xml.singleton_end();
+    xml.singleton_begin("nb_front_end       "); xml.attribut("value",toString(_nb_front_end       )); xml.singleton_end();
+    xml.singleton_begin("nb_ooo_engine      "); xml.attribut("value",toString(_nb_ooo_engine      )); xml.singleton_end();
+    xml.singleton_begin("nb_packet          "); xml.attribut("value",toString(_nb_packet          )); xml.singleton_end();
+    xml.singleton_begin("size_general_data  "); xml.attribut("value",toString(_size_general_data  )); xml.singleton_end();
+    xml.singleton_begin("nb_general_register"); xml.attribut("value",toString(_nb_general_register)); xml.singleton_end();
+    xml.singleton_begin("size_special_data  "); xml.attribut("value",toString(_size_special_data  )); xml.singleton_end();
+    xml.singleton_begin("nb_special_register"); xml.attribut("value",toString(_nb_special_register)); xml.singleton_end();
+    xml.singleton_begin("nb_operation       "); xml.attribut("value",toString(_nb_operation       )); xml.singleton_end();
+    xml.singleton_begin("nb_type            "); xml.attribut("value",toString(_nb_type            )); xml.singleton_end();
+    xml.balise_close();
+
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"End");
+    
+    return xml.get_body(depth);
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operator<<"
+  std::ostream& operator<< (std::ostream& output_stream ,
+			    morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::Parameters & x)
+  {
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"Begin");
+
+    output_stream << x.print(0);
+    
+    log_printf(FUNC,Functionnal_unit,FUNCTION,"End");
+
+    return output_stream;
+  };
+
+}; // end namespace functionnal_unit
+}; // end namespace execute_unit
+}; // end namespace multi_execute_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/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/include/Memory.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/include/Memory.h	(revision 71)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/include/Memory.h	(revision 72)
@@ -79,11 +79,11 @@
     morpheo::behavioural::Tdcache_data_t rdata;
 
-    if (type == DCACHE_LOAD)
+    if (type == DCACHE_TYPE_LOAD)
       rdata = read  (context, address, type);
     else
-      if ((type == DCACHE_STORE_8 ) or
-	  (type == DCACHE_STORE_16) or
-	  (type == DCACHE_STORE_32) or
-	  (type == DCACHE_STORE_64) )
+      if ((type == DCACHE_TYPE_STORE_8 ) or
+	  (type == DCACHE_TYPE_STORE_16) or
+	  (type == DCACHE_TYPE_STORE_32) or
+	  (type == DCACHE_TYPE_STORE_64) )
 	rdata = write (context, address, type, data);
       else
@@ -186,7 +186,7 @@
     // 3   24
 
-    uint32_t memory_size = ((type==DCACHE_STORE_16)?MEMORY_SIZE_16:
-			    ((type==DCACHE_STORE_32)?MEMORY_SIZE_32:
-			     ((type==DCACHE_STORE_64 )?MEMORY_SIZE_64:MEMORY_SIZE_8)));
+    uint32_t memory_size = ((type==DCACHE_TYPE_STORE_16)?MEMORY_SIZE_16:
+			    ((type==DCACHE_TYPE_STORE_32)?MEMORY_SIZE_32:
+			     ((type==DCACHE_TYPE_STORE_64 )?MEMORY_SIZE_64:MEMORY_SIZE_8)));
 
     uint32_t index_min = LSB<<3; // *8
@@ -265,14 +265,14 @@
 	switch(i->_type)
 	  {
-	  case DCACHE_LOAD            : std::cout << "DCACHE_LOAD           "; break;
-	  case DCACHE_LOCK            : std::cout << "DCACHE_LOCK           "; break;
-	  case DCACHE_INVALIDATE      : std::cout << "DCACHE_INVALIDATE     "; break;
-	  case DCACHE_PREFETCH        : std::cout << "DCACHE_PREFETCH       "; break;
-	  case DCACHE_FLUSH           : std::cout << "DCACHE_FLUSH          "; break;
-	  case DCACHE_SYNCHRONIZATION : std::cout << "DCACHE_SYNCHRONIZATION"; break;
-	  case DCACHE_STORE_8         : std::cout << "DCACHE_STORE_8        "; break;
-	  case DCACHE_STORE_16        : std::cout << "DCACHE_STORE_16       "; break;
-	  case DCACHE_STORE_32        : std::cout << "DCACHE_STORE_32       "; break;
-	  case DCACHE_STORE_64        : std::cout << "DCACHE_STORE_64       "; break;
+	  case DCACHE_TYPE_LOAD            : std::cout << "DCACHE_TYPE_LOAD           "; break;
+	  case DCACHE_TYPE_LOCK            : std::cout << "DCACHE_TYPE_LOCK           "; break;
+	  case DCACHE_TYPE_INVALIDATE      : std::cout << "DCACHE_TYPE_INVALIDATE     "; break;
+	  case DCACHE_TYPE_PREFETCH        : std::cout << "DCACHE_TYPE_PREFETCH       "; break;
+	  case DCACHE_TYPE_FLUSH           : std::cout << "DCACHE_TYPE_FLUSH          "; break;
+	  case DCACHE_TYPE_SYNCHRONIZATION : std::cout << "DCACHE_TYPE_SYNCHRONIZATION"; break;
+	  case DCACHE_TYPE_STORE_8         : std::cout << "DCACHE_TYPE_STORE_8        "; break;
+	  case DCACHE_TYPE_STORE_16        : std::cout << "DCACHE_TYPE_STORE_16       "; break;
+	  case DCACHE_TYPE_STORE_32        : std::cout << "DCACHE_TYPE_STORE_32       "; break;
+	  case DCACHE_TYPE_STORE_64        : std::cout << "DCACHE_TYPE_STORE_64       "; break;
 	  }
 	std::cout << " - "
@@ -294,15 +294,15 @@
   Memory_t * memory = new Memory_t (_nb_context, _nb_word, _size_word);
   
-  memory -> access (2, 0x10, DCACHE_STORE_32, 0xdeadbeef);
-  memory -> access (2, 0x14, DCACHE_STORE_16, 0xdada5678);
-  memory -> access (2, 0x16, DCACHE_STORE_16, 0xbead1234);
-  memory -> access (2, 0x18, DCACHE_STORE_8 , 0x45675681);
-  memory -> access (2, 0x19, DCACHE_STORE_8 , 0x1f311219);
-  memory -> access (2, 0x1a, DCACHE_STORE_8 , 0x2e075607);
-  memory -> access (2, 0x1b, DCACHE_STORE_8 , 0x19811221);
-  
-  TEST(morpheo::behavioural::Tdcache_data_t, memory -> access (2, 0x10, DCACHE_LOAD, 0), 0xdeadbeef);
-  TEST(morpheo::behavioural::Tdcache_data_t, memory -> access (2, 0x14, DCACHE_LOAD, 0), 0x12345678);
-  TEST(morpheo::behavioural::Tdcache_data_t, memory -> access (2, 0x18, DCACHE_LOAD, 0), 0x21071981);
+  memory -> access (2, 0x10, DCACHE_TYPE_STORE_32, 0xdeadbeef);
+  memory -> access (2, 0x14, DCACHE_TYPE_STORE_16, 0xdada5678);
+  memory -> access (2, 0x16, DCACHE_TYPE_STORE_16, 0xbead1234);
+  memory -> access (2, 0x18, DCACHE_TYPE_STORE_8 , 0x45675681);
+  memory -> access (2, 0x19, DCACHE_TYPE_STORE_8 , 0x1f311219);
+  memory -> access (2, 0x1a, DCACHE_TYPE_STORE_8 , 0x2e075607);
+  memory -> access (2, 0x1b, DCACHE_TYPE_STORE_8 , 0x19811221);
+  
+  TEST(morpheo::behavioural::Tdcache_data_t, memory -> access (2, 0x10, DCACHE_TYPE_LOAD, 0), 0xdeadbeef);
+  TEST(morpheo::behavioural::Tdcache_data_t, memory -> access (2, 0x14, DCACHE_TYPE_LOAD, 0), 0x12345678);
+  TEST(morpheo::behavioural::Tdcache_data_t, memory -> access (2, 0x18, DCACHE_TYPE_LOAD, 0), 0x21071981);
 
   TEST(morpheo::behavioural::Tdcache_data_t, memory -> read_lsq (2, 0x10, OPERATION_MEMORY_LOAD_8_Z ), 0x000000ef);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/src/test1.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/src/test1.cpp	(revision 71)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/src/test1.cpp	(revision 72)
@@ -629,6 +629,6 @@
 		  LABEL("   * rdata : " + toString(rdata));
 
-		  if ((out_DCACHE_REQ_TYPE->read() == DCACHE_SYNCHRONIZATION) or
-		      (out_DCACHE_REQ_TYPE->read() == DCACHE_LOAD))
+		  if ((out_DCACHE_REQ_TYPE->read() == DCACHE_TYPE_SYNCHRONIZATION) or
+		      (out_DCACHE_REQ_TYPE->read() == DCACHE_TYPE_LOAD))
 		    {
 		      LABEL("     * have_dcache_rsp");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/src/test2.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/src/test2.cpp	(revision 71)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/src/test2.cpp	(revision 72)
@@ -657,5 +657,5 @@
 		    {
 		      // Bus error
-		      error = 1;
+		      error = DCACHE_ERROR_BUS_ERROR;
 		      rdata = address; // convention : cache return the address fautive !
 		    }
@@ -667,10 +667,10 @@
 
 		  // test type : send or not a respons !
-		  if ((out_DCACHE_REQ_TYPE->read() == DCACHE_SYNCHRONIZATION) or
-		      (out_DCACHE_REQ_TYPE->read() == DCACHE_LOAD) or
-		      ((error == 1) and ((out_DCACHE_REQ_TYPE->read() == DCACHE_STORE_8 ) or
-					 (out_DCACHE_REQ_TYPE->read() == DCACHE_STORE_16) or
-					 (out_DCACHE_REQ_TYPE->read() == DCACHE_STORE_32) or
-					 (out_DCACHE_REQ_TYPE->read() == DCACHE_STORE_64) )))
+		  if ((out_DCACHE_REQ_TYPE->read() == DCACHE_TYPE_SYNCHRONIZATION) or
+		      (out_DCACHE_REQ_TYPE->read() == DCACHE_TYPE_LOAD) or
+		      ((error != DCACHE_ERROR_NONE) and ((out_DCACHE_REQ_TYPE->read() == DCACHE_TYPE_STORE_8 ) or
+							 (out_DCACHE_REQ_TYPE->read() == DCACHE_TYPE_STORE_16) or
+							 (out_DCACHE_REQ_TYPE->read() == DCACHE_TYPE_STORE_32) or
+							 (out_DCACHE_REQ_TYPE->read() == DCACHE_TYPE_STORE_64) )))
 		    {
 		      LABEL("     * have_dcache_rsp");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_allocation.cpp	(revision 71)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_allocation.cpp	(revision 72)
@@ -114,5 +114,4 @@
 //    out_MEMORY_OUT_DATA_RE       = interface->set_signal_out <Tspecial_data_t   > ("data_re"       ,_param->_size_general_data     );
       out_MEMORY_OUT_EXCEPTION     = interface->set_signal_out <Texception_t      > ("exception"     ,_param->_size_exception        );
-
     }
 
@@ -132,5 +131,5 @@
       out_DCACHE_REQ_CONTEXT_ID = interface->set_signal_out <Tcontext_t        > ("context_id",_param->_size_dcache_context_id  );
       out_DCACHE_REQ_PACKET_ID  = interface->set_signal_out <Tpacket_t         > ("packet_id" ,_param->_size_dcache_packet_id   );
-      out_DCACHE_REQ_ADDRESS    = interface->set_signal_out <Tdcache_address_t > ("address"   ,_param->_size_dcache_address);
+      out_DCACHE_REQ_ADDRESS    = interface->set_signal_out <Tdcache_address_t > ("address"   ,_param->_size_general_data);
       out_DCACHE_REQ_TYPE       = interface->set_signal_out <Tdcache_type_t    > ("type"      ,_param->_size_dcache_type );
       out_DCACHE_REQ_WDATA      = interface->set_signal_out <Tdcache_data_t    > ("wdata"     ,_param->_size_general_data);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_function_speculative_load_commit_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_function_speculative_load_commit_transition.cpp	(revision 71)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_function_speculative_load_commit_transition.cpp	(revision 72)
@@ -620,5 +620,5 @@
 		
 		
-		if (error != 0)
+		if (error != DCACHE_ERROR_NONE)
 		  {
 		    log_printf(TRACE,Load_store_unit,FUNCTION," * have a bus error !!!");
