Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/Makefile
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/Makefile	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/Makefile	(revision 88)
@@ -24,4 +24,6 @@
 library_clean			: Execution_unit_to_Write_unit_library_clean
 
+local_clean			:
+
 include                         $(DIR_COMPONENT)/Makefile.deps
 include                         $(DIR_MORPHEO)/Behavioural/Makefile.flags
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/config_min.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/config_min.cfg	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/config_min.cfg	(revision 88)
@@ -1,4 +1,6 @@
 Execution_unit_to_Write_unit
 2	2 	*2	# nb_execute_unit        
+1	1 	+1	# nb_execute_unit_port [0] [nb_execute_unit]
+1	1 	+1	# nb_execute_unit_port [1] [nb_execute_unit]
 1	1 	*2	# nb_write_unit           
 1	1	*2	# nb_context             
@@ -11,5 +13,5 @@
 16	16	*2	# nb_special_register    
 0	1	+1	# priority
-1	1	+1	# table_routing        [0][0]
-1	1	+1	# table_routing        [1][0]
+1	1	+1	# table_routing        [0][0][0]
+1	1	+1	# table_routing        [1][0][0]
 1	1	+1	# table_execute_thread [0][0]
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/config_multi_execute-mono_thread.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/config_multi_execute-mono_thread.cfg	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/config_multi_execute-mono_thread.cfg	(revision 88)
@@ -1,4 +1,8 @@
 Execution_unit_to_Write_unit
 4	4 	*2	# nb_execute_unit        
+1	1 	+1	# nb_execute_unit_port [0] [nb_execute_unit]
+1	1 	+1	# nb_execute_unit_port [1] [nb_execute_unit]
+1	1 	+1	# nb_execute_unit_port [2] [nb_execute_unit]
+1	1 	+1	# nb_execute_unit_port [3] [nb_execute_unit]
 3	3 	*2	# nb_write_unit           
 1	1	*2	# nb_context             
@@ -11,16 +15,16 @@
 16	16	*2	# nb_special_register    
 0	1	+1	# priority
-1	1	+1	# table_routing [0][0]
-0 	0	+1	# table_routing [0][1]
-0	0	+1	# table_routing [0][2]
-0	0	+1	# table_routing [1][0]
-1	1	+1	# table_routing [1][1]
-1	1	+1	# table_routing [1][2]
-0	0	+1	# table_routing [2][0]
-0	0	+1	# table_routing [2][1]
-1	1	+1	# table_routing [2][2]
-1	1	+1	# table_routing [3][0]
-1	1	+1	# table_routing [3][1]
-1	1	+1	# table_routing [3][2]
+1	1	+1	# table_routing [0][0][0]
+0 	0	+1	# table_routing [0][1][0]
+0	0	+1	# table_routing [0][2][0]
+0	0	+1	# table_routing [1][0][0]
+1	1	+1	# table_routing [1][1][0]
+1	1	+1	# table_routing [1][2][0]
+0	0	+1	# table_routing [2][0][0]
+0	0	+1	# table_routing [2][1][0]
+1	1	+1	# table_routing [2][2][0]
+1	1	+1	# table_routing [3][0][0]
+1	1	+1	# table_routing [3][1][0]
+1	1	+1	# table_routing [3][2][0]
 1	1	+1	# table_thread  [0][0]
 1	1	+1	# table_thread  [1][0]
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/config_multi_execute-multi_thread-multi_port.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/config_multi_execute-multi_thread-multi_port.cfg	(revision 88)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/config_multi_execute-multi_thread-multi_port.cfg	(revision 88)
@@ -0,0 +1,52 @@
+Execution_unit_to_Write_unit
+4	4 	*2	# nb_execute_unit        
+2	2 	+1	# nb_execute_unit_port [0] [nb_execute_unit]
+3	3 	+1	# nb_execute_unit_port [1] [nb_execute_unit]
+1	1 	+1	# nb_execute_unit_port [2] [nb_execute_unit]
+2	2 	+1	# nb_execute_unit_port [3] [nb_execute_unit]
+3	3 	*2	# nb_write_unit           
+2	2	*2	# nb_context             
+2	2	*2	# nb_front_end           
+1	1	*2	# nb_ooo_engine          
+64	64	*2	# nb_packet              
+32	32	*2	# size_general_data      
+2	2	*2	# size_special_data      
+64	64	*2	# nb_general_register    
+16	16	*2	# nb_special_register    
+0	1	+1	# priority
+1	1	+1	# table_routing [0][0][0]
+1	1	+1	# table_routing [0][0][1]
+0 	0	+1	# table_routing [0][0][2]
+0 	0	+1	# table_routing [0][1][0]
+1	1	+1	# table_routing [0][1][1]
+0	0	+1	# table_routing [0][1][2]
+0	0	+1	# table_routing [1][0][0]
+1	1	+1	# table_routing [1][0][1]
+0	0	+1	# table_routing [1][0][2]
+1	1	+1	# table_routing [1][1][0]
+1	1	+1	# table_routing [1][1][1]
+1	1	+1	# table_routing [1][1][2]
+1	1	+1	# table_routing [1][2][0]
+1	1	+1	# table_routing [1][2][1]
+1	1	+1	# table_routing [1][2][2]
+0	0	+1	# table_routing [2][0][0]
+0	0	+1	# table_routing [2][0][1]
+1	1	+1	# table_routing [2][0][2]
+1	1	+1	# table_routing [3][0][0]
+1	1	+1	# table_routing [3][0][1]
+1	1	+1	# table_routing [3][0][2]
+1	1	+1	# table_routing [3][1][0]
+1	1	+1	# table_routing [3][1][1]
+1	1	+1	# table_routing [3][1][2]
+1	1	+1	# table_thread  [0][0]
+0	0	+1	# table_thread  [0][1]
+0	0	+1	# table_thread  [0][2]
+0	0	+1	# table_thread  [0][3]
+0	0	+1	# table_thread  [1][0]
+1	1	+1	# table_thread  [1][1]
+1	1	+1	# table_thread  [1][2]
+0	0	+1	# table_thread  [1][3]
+0	0	+1	# table_thread  [2][0]
+0	0	+1	# table_thread  [2][1]
+0	0	+1	# table_thread  [2][2]
+1	1	+1	# table_thread  [2][3]
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/config_multi_execute-multi_thread.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/config_multi_execute-multi_thread.cfg	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/config_multi_execute-multi_thread.cfg	(revision 88)
@@ -1,4 +1,8 @@
 Execution_unit_to_Write_unit
 4	4 	*2	# nb_execute_unit        
+1	1 	+1	# nb_execute_unit_port [0] [nb_execute_unit]
+1	1 	+1	# nb_execute_unit_port [1] [nb_execute_unit]
+1	1 	+1	# nb_execute_unit_port [2] [nb_execute_unit]
+1	1 	+1	# nb_execute_unit_port [3] [nb_execute_unit]
 3	3 	*2	# nb_write_unit           
 2	2	*2	# nb_context             
@@ -11,16 +15,16 @@
 16	16	*2	# nb_special_register    
 0	1	+1	# priority
-1	1	+1	# table_routing [0][0]
-0 	0	+1	# table_routing [0][1]
-0	0	+1	# table_routing [0][2]
-0	0	+1	# table_routing [1][0]
-1	1	+1	# table_routing [1][1]
-1	1	+1	# table_routing [1][2]
-0	0	+1	# table_routing [2][0]
-0	0	+1	# table_routing [2][1]
-1	1	+1	# table_routing [2][2]
-1	1	+1	# table_routing [3][0]
-1	1	+1	# table_routing [3][1]
-1	1	+1	# table_routing [3][2]
+1	1	+1	# table_routing [0][0][0]
+0 	0	+1	# table_routing [0][1][0]
+0	0	+1	# table_routing [0][2][0]
+0	0	+1	# table_routing [1][0][0]
+1	1	+1	# table_routing [1][1][0]
+1	1	+1	# table_routing [1][2][0]
+0	0	+1	# table_routing [2][0][0]
+0	0	+1	# table_routing [2][1][0]
+1	1	+1	# table_routing [2][2][0]
+1	1	+1	# table_routing [3][0][0]
+1	1	+1	# table_routing [3][1][0]
+1	1	+1	# table_routing [3][2][0]
 1	1	+1	# table_thread  [0][0]
 0	0	+1	# table_thread  [0][1]
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/include/test.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/include/test.h	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/include/test.h	(revision 88)
@@ -15,6 +15,10 @@
 #include <sys/time.h>
 
+#define NB_ITERATION  1
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Common/include/Time.h"
 #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/include/Execution_unit_to_Write_unit.h"
+#include "Common/include/Test.h"
 
 using namespace std;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/src/main.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/src/main.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/src/main.cpp	(revision 88)
@@ -14,17 +14,18 @@
   err (_("<Usage> %s name_instance list_params.\n"),argv[0]);
   err (_("list_params is :\n"));
-  err (_("  * nb_execute_unit                                (uint32_t)\n"));
-  err (_("  * nb_write_unit                                  (uint32_t)\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 (_("  * size_special_data                              (uint32_t)\n"));
-  err (_("  * nb_general_register                            (uint32_t)\n"));
-  err (_("  * nb_special_register                            (uint32_t)\n"));
-  err (_("  * priority                                       (uint32_t)\n"));
-  err (_("  * table_routing [nb_execute_unit][nb_write_unit] (bool    )\n"));
-  err (_("  * table_thread  [nb_write_unit][nb_thread]       (bool    )\n"));
+  err (_("  * nb_execute_unit                                                      (uint32_t)\n"));
+  err (_("  * nb_execute_unit_port [nb_execute_unit]                               (uint32_t)\n"));
+  err (_("  * nb_write_unit                                                        (uint32_t)\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 (_("  * size_special_data                                                    (uint32_t)\n"));
+  err (_("  * nb_general_register                                                  (uint32_t)\n"));
+  err (_("  * nb_special_register                                                  (uint32_t)\n"));
+  err (_("  * priority                                                             (uint32_t)\n"));
+  err (_("  * table_routing [nb_execute_unit][nb_execute_unit_port][nb_write_unit] (bool    )\n"));
+  err (_("  * table_thread  [nb_write_unit][nb_thread]                             (bool    )\n"));
 
   exit (1);
@@ -43,30 +44,46 @@
 
   const string   name      =      argv[x++];
-  uint32_t    _nb_execute_unit      = atoi(argv[x++]);
-  uint32_t    _nb_write_unit        = atoi(argv[x++]);
-  uint32_t    _nb_context           = atoi(argv[x++]);
-  uint32_t    _nb_front_end         = atoi(argv[x++]);
-  uint32_t    _nb_ooo_engine        = atoi(argv[x++]);
-  uint32_t    _nb_packet            = atoi(argv[x++]);
-  uint32_t    _size_general_data    = atoi(argv[x++]);
-  uint32_t    _size_special_data    = atoi(argv[x++]);
-  uint32_t    _nb_general_register  = atoi(argv[x++]);
-  uint32_t    _nb_special_register  = atoi(argv[x++]);
+  uint32_t    _nb_execute_unit      = fromString<uint32_t>(argv[x++]);
+
+  if (static_cast<uint32_t>(argc) <= 2+NB_PARAMS+_nb_execute_unit)
+    usage (argc, argv);
+
+  uint32_t    _sum_execute_unit_port = 0;
+  uint32_t *  _nb_execute_unit_port = new uint32_t [_nb_execute_unit];
+  for (uint32_t i=0; i<_nb_execute_unit; i++)
+    {
+      _nb_execute_unit_port [i] = fromString<uint32_t>(argv[x++]);
+      _sum_execute_unit_port += _nb_execute_unit_port [i];
+    }
+
+  uint32_t    _nb_write_unit        = fromString<uint32_t>(argv[x++]);
+  uint32_t    _nb_context           = fromString<uint32_t>(argv[x++]);
+  uint32_t    _nb_front_end         = fromString<uint32_t>(argv[x++]);
+  uint32_t    _nb_ooo_engine        = fromString<uint32_t>(argv[x++]);
+  uint32_t    _nb_packet            = fromString<uint32_t>(argv[x++]);
+  uint32_t    _size_general_data    = fromString<uint32_t>(argv[x++]);
+  uint32_t    _size_special_data    = fromString<uint32_t>(argv[x++]);
+  uint32_t    _nb_general_register  = fromString<uint32_t>(argv[x++]);
+  uint32_t    _nb_special_register  = fromString<uint32_t>(argv[x++]);
   Tpriority_t _priority             = fromString<Tpriority_t>(argv[x++]);
 
   uint32_t    _nb_thread            = get_nb_thread(_nb_context, _nb_front_end, _nb_ooo_engine);
 
-  if (static_cast<uint32_t>(argc) != 2+NB_PARAMS+(_nb_write_unit*_nb_execute_unit)+(_nb_write_unit*_nb_thread))
+  if (static_cast<uint32_t>(argc) != 2+NB_PARAMS+_nb_execute_unit+(_nb_write_unit*_sum_execute_unit_port)+(_nb_write_unit*_nb_thread))
     usage (argc, argv);
   
-  bool ** _table_routing;
-  bool ** _table_thread ;
+  bool *** _table_routing;
+  bool  ** _table_thread ;
   
-  _table_routing = new bool * [_nb_execute_unit];
+  _table_routing = new bool ** [_nb_execute_unit];
   for (uint32_t i=0; i<_nb_execute_unit; i++)
     {
-      _table_routing [i] = new bool [_nb_write_unit];
-      for (uint32_t j=0; j<_nb_write_unit; j++)
-	_table_routing [i][j] = atoi(argv[x++]);
+      _table_routing [i] = new bool * [_nb_execute_unit_port [i]];
+      for (uint32_t j=0; j<_nb_execute_unit_port [i]; j++)
+	{
+	  _table_routing [i][j] = new bool [_nb_write_unit];
+	  for (uint32_t k=0; k<_nb_write_unit; k++)
+	    _table_routing [i][j][k] = fromString<bool>(argv[x++]);
+	}
     }
 
@@ -77,11 +94,13 @@
 
       for (uint32_t j=0; j<_nb_thread; j++)
-	_table_thread [i][j] = atoi(argv[x++]);
+	_table_thread [i][j] = fromString<bool>(argv[x++]);
     }
 
+  int _return = EXIT_SUCCESS;
   try 
     {
       morpheo::behavioural::core::multi_execute_loop::execute_loop::network::execution_unit_to_write_unit::Parameters * param = new morpheo::behavioural::core::multi_execute_loop::execute_loop::network::execution_unit_to_write_unit::Parameters
 	(_nb_execute_unit      ,
+	 _nb_execute_unit_port ,
 	 _nb_write_unit        ,
 	 _nb_context           ,
@@ -95,8 +114,9 @@
 	 _priority             ,
 	 _table_routing        ,
-	 _table_thread 
+	 _table_thread         ,
+         true //is_toplevel
 	 );
       
-      msg(_("%s"),param->print(1).c_str());
+      msg(_("%s"),param->print(0).c_str());
       
       test (name,param);
@@ -104,11 +124,19 @@
   catch (morpheo::ErrorMorpheo & error)
     {
-      msg (_("<%s> : %s.\n"),name.c_str(), error.what ());
-      exit (EXIT_FAILURE);
+      msg (_("<%s> :\n%s"),name.c_str(), error.what ());
+      _return = EXIT_FAILURE;
     }
-  catch (...)
+  
+  try 
     {
-      err (_("<%s> : This test must generate a error.\n"),name.c_str());
-      exit (EXIT_FAILURE);
+      if (_return == EXIT_SUCCESS)
+	TEST_OK("Execution_unit_to_Write_unit : no error");
+      else
+	TEST_KO("Execution_unit_to_Write_unit : a lot of error");
+    }
+  catch (morpheo::ErrorMorpheo & error)
+    {
+//       msg (_("<%s> :\n%s"),name.c_str(), error.what ());
+      _return = EXIT_FAILURE;
     }
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/src/test.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/src/test.cpp	(revision 88)
@@ -7,9 +7,5 @@
  */
 
-#define NB_ITERATION  1
-#define CYCLE_MAX     (128*NB_ITERATION)
-
 #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/include/test.h"
-#include "Common/include/Test.h"
 #include "Common/include/BitManipulation.h"
 #include "Behavioural/include/Allocation.h"
@@ -78,4 +74,14 @@
 #endif
 
+  Tusage_t _usage = USE_ALL;
+
+//   _usage = usage_unset(_usage,USE_SYSTEMC              );
+//   _usage = usage_unset(_usage,USE_VHDL                 );
+//   _usage = usage_unset(_usage,USE_VHDL_TESTBENCH       );
+//   _usage = usage_unset(_usage,USE_VHDL_TESTBENCH_ASSERT);
+//   _usage = usage_unset(_usage,USE_POSITION             );
+   _usage = usage_unset(_usage,USE_STATISTICS           );
+//   _usage = usage_unset(_usage,USE_INFORMATION          );
+
   Execution_unit_to_Write_unit * _Execution_unit_to_Write_unit = new Execution_unit_to_Write_unit 
     (name.c_str(),
@@ -84,5 +90,5 @@
 #endif
      _param,
-     USE_ALL);
+     _usage);
   
 #ifdef SYSTEMC
@@ -95,21 +101,22 @@
   sc_signal<Tcontrol_t> *  in_NRESET = new sc_signal<Tcontrol_t> ("NRESET");
 
-  ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_VAL          ," in_EXECUTE_UNIT_OUT_VAL          ",Tcontrol_t        ,_param->_nb_execute_unit);
-  ALLOC1_SC_SIGNAL(out_EXECUTE_UNIT_OUT_ACK          ,"out_EXECUTE_UNIT_OUT_ACK          ",Tcontrol_t        ,_param->_nb_execute_unit);
-  ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_CONTEXT_ID   ," in_EXECUTE_UNIT_OUT_CONTEXT_ID   ",Tcontext_t        ,_param->_nb_execute_unit);
-  ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_FRONT_END_ID ," in_EXECUTE_UNIT_OUT_FRONT_END_ID ",Tcontext_t        ,_param->_nb_execute_unit);
-  ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID," in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID",Tcontext_t        ,_param->_nb_execute_unit);
-  ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_PACKET_ID    ," in_EXECUTE_UNIT_OUT_PACKET_ID    ",Tpacket_t         ,_param->_nb_execute_unit);
-//ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_OPERATION    ," in_EXECUTE_UNIT_OUT_OPERATION    ",Toperation_t      ,_param->_nb_execute_unit);
-  ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_TYPE         ," in_EXECUTE_UNIT_OUT_TYPE         ",Ttype_t           ,_param->_nb_execute_unit);
-  ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_WRITE_RD     ," in_EXECUTE_UNIT_OUT_WRITE_RD     ",Tcontrol_t        ,_param->_nb_execute_unit);
-  ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_NUM_REG_RD   ," in_EXECUTE_UNIT_OUT_NUM_REG_RD   ",Tgeneral_address_t,_param->_nb_execute_unit);
-  ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_DATA_RD      ," in_EXECUTE_UNIT_OUT_DATA_RD      ",Tgeneral_data_t   ,_param->_nb_execute_unit);
-  ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_WRITE_RE     ," in_EXECUTE_UNIT_OUT_WRITE_RE     ",Tcontrol_t        ,_param->_nb_execute_unit);
-  ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_NUM_REG_RE   ," in_EXECUTE_UNIT_OUT_NUM_REG_RE   ",Tspecial_address_t,_param->_nb_execute_unit);
-  ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_DATA_RE      ," in_EXECUTE_UNIT_OUT_DATA_RE      ",Tspecial_data_t   ,_param->_nb_execute_unit);
-  ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_EXCEPTION    ," in_EXECUTE_UNIT_OUT_EXCEPTION    ",Texception_t      ,_param->_nb_execute_unit);
-  ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_NO_SEQUENCE  ," in_EXECUTE_UNIT_OUT_NO_SEQUENCE  ",Tcontrol_t        ,_param->_nb_execute_unit);
-  ALLOC1_SC_SIGNAL( in_EXECUTE_UNIT_OUT_ADDRESS      ," in_EXECUTE_UNIT_OUT_ADDRESS      ",Tgeneral_data_t   ,_param->_nb_execute_unit);
+  ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_VAL          ," in_EXECUTE_UNIT_OUT_VAL          ",Tcontrol_t        ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  ALLOC2_SC_SIGNAL(out_EXECUTE_UNIT_OUT_ACK          ,"out_EXECUTE_UNIT_OUT_ACK          ",Tcontrol_t        ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_CONTEXT_ID   ," in_EXECUTE_UNIT_OUT_CONTEXT_ID   ",Tcontext_t        ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_FRONT_END_ID ," in_EXECUTE_UNIT_OUT_FRONT_END_ID ",Tcontext_t        ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID," in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID",Tcontext_t        ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_PACKET_ID    ," in_EXECUTE_UNIT_OUT_PACKET_ID    ",Tpacket_t         ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+//ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_OPERATION    ," in_EXECUTE_UNIT_OUT_OPERATION    ",Toperation_t      ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_TYPE         ," in_EXECUTE_UNIT_OUT_TYPE         ",Ttype_t           ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_WRITE_RD     ," in_EXECUTE_UNIT_OUT_WRITE_RD     ",Tcontrol_t        ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_NUM_REG_RD   ," in_EXECUTE_UNIT_OUT_NUM_REG_RD   ",Tgeneral_address_t,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_DATA_RD      ," in_EXECUTE_UNIT_OUT_DATA_RD      ",Tgeneral_data_t   ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_WRITE_RE     ," in_EXECUTE_UNIT_OUT_WRITE_RE     ",Tcontrol_t        ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_NUM_REG_RE   ," in_EXECUTE_UNIT_OUT_NUM_REG_RE   ",Tspecial_address_t,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_DATA_RE      ," in_EXECUTE_UNIT_OUT_DATA_RE      ",Tspecial_data_t   ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_EXCEPTION    ," in_EXECUTE_UNIT_OUT_EXCEPTION    ",Texception_t      ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_NO_SEQUENCE  ," in_EXECUTE_UNIT_OUT_NO_SEQUENCE  ",Tcontrol_t        ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  ALLOC2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_ADDRESS      ," in_EXECUTE_UNIT_OUT_ADDRESS      ",Tgeneral_data_t   ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+
   ALLOC1_SC_SIGNAL(out_WRITE_UNIT_IN_VAL             ,"out_WRITE_UNIT_IN_VAL             ",Tcontrol_t        ,_param->_nb_write_unit  );
   ALLOC1_SC_SIGNAL( in_WRITE_UNIT_IN_ACK             ," in_WRITE_UNIT_IN_ACK             ",Tcontrol_t        ,_param->_nb_write_unit  );
@@ -139,25 +146,25 @@
   (*(_Execution_unit_to_Write_unit->in_NRESET))       (*(in_NRESET));
 
-  INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_VAL          ,_param->_nb_execute_unit);
-  INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit,out_EXECUTE_UNIT_OUT_ACK          ,_param->_nb_execute_unit);
+  INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_VAL          ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit,out_EXECUTE_UNIT_OUT_ACK          ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
   if (_param->_have_port_context_id)
-  INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_CONTEXT_ID   ,_param->_nb_execute_unit);
+  INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_CONTEXT_ID   ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
   if (_param->_have_port_front_end_id)
-  INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_FRONT_END_ID ,_param->_nb_execute_unit);
+  INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_FRONT_END_ID ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
   if (_param->_have_port_ooo_engine_id)
-  INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID,_param->_nb_execute_unit);
-  if (_param->_have_port_packet_id)
-  INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_PACKET_ID    ,_param->_nb_execute_unit);
-//INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_OPERATION    ,_param->_nb_execute_unit);
-  INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_TYPE         ,_param->_nb_execute_unit);
-  INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_WRITE_RD     ,_param->_nb_execute_unit);
-  INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_NUM_REG_RD   ,_param->_nb_execute_unit);
-  INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_DATA_RD      ,_param->_nb_execute_unit);
-  INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_WRITE_RE     ,_param->_nb_execute_unit);
-  INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_NUM_REG_RE   ,_param->_nb_execute_unit);
-  INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_DATA_RE      ,_param->_nb_execute_unit);
-  INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_EXCEPTION    ,_param->_nb_execute_unit);
-  INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_NO_SEQUENCE  ,_param->_nb_execute_unit);
-  INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_ADDRESS      ,_param->_nb_execute_unit);
+  INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  if (_param->_have_port_rob_ptr  )
+  INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_PACKET_ID    ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+//INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_OPERATION    ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_TYPE         ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_WRITE_RD     ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_NUM_REG_RD   ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_DATA_RD      ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_WRITE_RE     ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_NUM_REG_RE   ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_DATA_RE      ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_EXCEPTION    ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_NO_SEQUENCE  ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  INSTANCE2_SC_SIGNAL(_Execution_unit_to_Write_unit, in_EXECUTE_UNIT_OUT_ADDRESS      ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
 
   INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit,out_WRITE_UNIT_IN_VAL             ,_param->_nb_write_unit  );
@@ -169,5 +176,5 @@
   if (_param->_have_port_ooo_engine_id)
   INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit,out_WRITE_UNIT_IN_OOO_ENGINE_ID   ,_param->_nb_write_unit  );
-  if (_param->_have_port_packet_id)
+  if (_param->_have_port_rob_ptr  )
   INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit,out_WRITE_UNIT_IN_PACKET_ID       ,_param->_nb_write_unit  );
 //INSTANCE1_SC_SIGNAL(_Execution_unit_to_Write_unit,out_WRITE_UNIT_IN_OPERATION       ,_param->_nb_write_unit  );
@@ -201,14 +208,16 @@
   const  int32_t percent_transaction_out = 75;
 
-  set<Tcontext_t> execute_unit_thread [_param->_nb_execute_unit];
+  set<Tcontext_t> execute_unit_thread [_param->_nb_execute_unit][_param->_max_nb_execute_unit_port];
  
   for (uint32_t i=0; i<_param->_nb_execute_unit; i++)
-    for (uint32_t j=0; j<_param->_nb_write_unit; j++)
-      if (_param->_table_routing[i][j])
-	for (uint32_t k=0; k<_param->_nb_thread; k++)
-	  if (_param->_table_thread[j][k])
-	    {
-	      execute_unit_thread [i].insert(k);
-	    }
+    for (uint32_t ii=0; ii<_param->_nb_execute_unit_port[i]; ii++)
+      for (uint32_t j=0; j<_param->_nb_write_unit; j++)
+	if (_param->_table_routing[i][ii][j])
+	  for (uint32_t k=0; k<_param->_nb_thread; k++)
+	    if (_param->_table_thread[j][k])
+	      {
+		execute_unit_thread [i][ii].insert(k);
+	      }
+
   SC_START(0);
   LABEL("Initialisation");
@@ -225,49 +234,50 @@
       LABEL("Iteration %d",iteration);
 
-      list<entry_t> request [_param->_nb_execute_unit];
+      list<entry_t> request [_param->_nb_execute_unit][_param->_max_nb_execute_unit_port];
 
       uint32_t nb_request_in;
       for (nb_request_in=0; nb_request_in < _param->_nb_packet; )
 	for (uint32_t i=0; i<_param->_nb_execute_unit; i++)
-	  {
-	    if (nb_request_in >= _param->_nb_packet)
-	      break;
-
-	    Tcontext_t context_id   ;
-	    Tcontext_t front_end_id ;
-	    Tcontext_t ooo_engine_id;
-	    Tcontext_t num_thread   ;
-
-	    // Find compatible thread
-	    do
-	      {
-		context_id    = range<Tcontext_t> (rand(), _param->_size_context_id   );
-		front_end_id  = range<Tcontext_t> (rand(), _param->_size_front_end_id );
-		ooo_engine_id = range<Tcontext_t> (rand(), _param->_size_ooo_engine_id);
-		num_thread    = get_num_thread (context_id   , _param->_size_context_id   ,
-						front_end_id , _param->_size_front_end_id ,
-						ooo_engine_id, _param->_size_ooo_engine_id);
-	      }
-	    while (execute_unit_thread[i].find(num_thread) == execute_unit_thread[i].end());
-
-	    request[i].push_back(entry_t (context_id   ,
-					  front_end_id ,
-					  ooo_engine_id,
-					  nb_request_in,
-					  //range<Toperation_t      > (rand(), _param->_size_operation       ),
-					  range<Ttype_t           > (rand(), _param->_size_type            ),
-					  range<Tcontrol_t        > (rand(), 2                             ),
-					  range<Tgeneral_address_t> (rand(), _param->_size_general_register),
-					  range<Tgeneral_data_t   > (rand(), _param->_size_general_data    ),
-					  range<Tcontrol_t        > (rand(), 2                             ),
-					  range<Tspecial_address_t> (rand(), _param->_size_special_register),
-					  range<Tspecial_data_t   > (rand(), _param->_size_special_data    ),
-					  range<Texception_t      > (rand(), _param->_size_exception       ),
-					  range<Tcontrol_t        > (rand(), 2                             ),
-					  range<Tgeneral_data_t   > (rand(), _param->_size_general_data    )
-					  ));
-
-	    nb_request_in++;
-	  }
+	  for (uint32_t j=0; j<_param->_nb_execute_unit_port[i]; j++)
+	    {
+	      if (nb_request_in >= _param->_nb_packet)
+		break;
+	      
+	      Tcontext_t context_id   ;
+	      Tcontext_t front_end_id ;
+	      Tcontext_t ooo_engine_id;
+	      Tcontext_t num_thread   ;
+	      
+	      // Find compatible thread
+	      do
+		{
+		  context_id    = range<Tcontext_t> (rand(), _param->_size_context_id   );
+		  front_end_id  = range<Tcontext_t> (rand(), _param->_size_front_end_id );
+		  ooo_engine_id = range<Tcontext_t> (rand(), _param->_size_ooo_engine_id);
+		  num_thread    = get_num_thread (context_id   , _param->_size_context_id   ,
+						  front_end_id , _param->_size_front_end_id ,
+						  ooo_engine_id, _param->_size_ooo_engine_id);
+		}
+	      while (execute_unit_thread[i][j].find(num_thread) == execute_unit_thread[i][j].end());
+	      
+	      request[i][j].push_back(entry_t (context_id   ,
+					       front_end_id ,
+					       ooo_engine_id,
+					       nb_request_in,
+					       //range<Toperation_t      > (rand(), _param->_size_operation       ),
+					       range<Ttype_t           > (rand(), _param->_size_type            ),
+					       range<Tcontrol_t        > (rand(), 2                             ),
+					       range<Tgeneral_address_t> (rand(), _param->_size_general_register),
+					       range<Tgeneral_data_t   > (rand(), _param->_size_general_data    ),
+					       range<Tcontrol_t        > (rand(), 2                             ),
+					       range<Tspecial_address_t> (rand(), _param->_size_special_register),
+					       range<Tspecial_data_t   > (rand(), _param->_size_special_data    ),
+					       range<Texception_t      > (rand(), _param->_size_exception       ),
+					       range<Tcontrol_t        > (rand(), 2                             ),
+					       range<Tgeneral_data_t   > (rand(), _param->_size_general_data    )
+					       ));
+	      
+	      nb_request_in++;
+	    }
 
       uint32_t   nb_request_out = 0;
@@ -276,28 +286,29 @@
 	{
 	  for (uint32_t i=0; i<_param->_nb_execute_unit; i++)
-	    {
-	      bool val = not request[i].empty() and ((rand()%100) < percent_transaction_in);
+	    for (uint32_t j=0; j<_param->_nb_execute_unit_port[i]; j++)
+	      {
+		bool val = not request[i][j].empty() and ((rand()%100) < percent_transaction_in);
 		
-	      in_EXECUTE_UNIT_OUT_VAL [i]->write(val);
-
-	      if (val)
-		{
-		  in_EXECUTE_UNIT_OUT_CONTEXT_ID           [i] ->write(request[i].front()._context_id           );
-		  in_EXECUTE_UNIT_OUT_FRONT_END_ID         [i] ->write(request[i].front()._front_end_id         );
-		  in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID        [i] ->write(request[i].front()._ooo_engine_id        );
-		  in_EXECUTE_UNIT_OUT_PACKET_ID            [i] ->write(request[i].front()._packet_id            );
-// 		  in_EXECUTE_UNIT_OUT_OPERATION            [i] ->write(request[i].front()._operation            );
-		  in_EXECUTE_UNIT_OUT_TYPE                 [i] ->write(request[i].front()._type                 );
-		  in_EXECUTE_UNIT_OUT_WRITE_RD             [i] ->write(request[i].front()._write_rd             );
-		  in_EXECUTE_UNIT_OUT_NUM_REG_RD           [i] ->write(request[i].front()._num_reg_rd           );
-		  in_EXECUTE_UNIT_OUT_DATA_RD              [i] ->write(request[i].front()._data_rd              );
-		  in_EXECUTE_UNIT_OUT_WRITE_RE             [i] ->write(request[i].front()._write_re             );
-		  in_EXECUTE_UNIT_OUT_NUM_REG_RE           [i] ->write(request[i].front()._num_reg_re           );
-		  in_EXECUTE_UNIT_OUT_DATA_RE              [i] ->write(request[i].front()._data_re              );
-		  in_EXECUTE_UNIT_OUT_EXCEPTION            [i] ->write(request[i].front()._exception            );
-		  in_EXECUTE_UNIT_OUT_NO_SEQUENCE          [i] ->write(request[i].front()._no_sequence          );
-		  in_EXECUTE_UNIT_OUT_ADDRESS              [i] ->write(request[i].front()._address              );
-		}
-	    }
+		in_EXECUTE_UNIT_OUT_VAL [i][j]->write(val);
+		
+		if (val)
+		  {
+		    in_EXECUTE_UNIT_OUT_CONTEXT_ID           [i][j] ->write(request[i][j].front()._context_id           );
+		    in_EXECUTE_UNIT_OUT_FRONT_END_ID         [i][j] ->write(request[i][j].front()._front_end_id         );
+		    in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID        [i][j] ->write(request[i][j].front()._ooo_engine_id        );
+		    in_EXECUTE_UNIT_OUT_PACKET_ID            [i][j] ->write(request[i][j].front()._packet_id            );
+// 		    in_EXECUTE_UNIT_OUT_OPERATION            [i][j] ->write(request[i][j].front()._operation            );
+		    in_EXECUTE_UNIT_OUT_TYPE                 [i][j] ->write(request[i][j].front()._type                 );
+		    in_EXECUTE_UNIT_OUT_WRITE_RD             [i][j] ->write(request[i][j].front()._write_rd             );
+		    in_EXECUTE_UNIT_OUT_NUM_REG_RD           [i][j] ->write(request[i][j].front()._num_reg_rd           );
+		    in_EXECUTE_UNIT_OUT_DATA_RD              [i][j] ->write(request[i][j].front()._data_rd              );
+		    in_EXECUTE_UNIT_OUT_WRITE_RE             [i][j] ->write(request[i][j].front()._write_re             );
+		    in_EXECUTE_UNIT_OUT_NUM_REG_RE           [i][j] ->write(request[i][j].front()._num_reg_re           );
+		    in_EXECUTE_UNIT_OUT_DATA_RE              [i][j] ->write(request[i][j].front()._data_re              );
+		    in_EXECUTE_UNIT_OUT_EXCEPTION            [i][j] ->write(request[i][j].front()._exception            );
+		    in_EXECUTE_UNIT_OUT_NO_SEQUENCE          [i][j] ->write(request[i][j].front()._no_sequence          );
+		    in_EXECUTE_UNIT_OUT_ADDRESS              [i][j] ->write(request[i][j].front()._address              );
+		  }
+	      }
 
 	  for (uint32_t i=0; i<_param->_nb_write_unit; i++)
@@ -307,9 +318,10 @@
 
 	  for (uint32_t i=0; i<_param->_nb_execute_unit; i++)
-	    if (in_EXECUTE_UNIT_OUT_VAL [i]->read() and out_EXECUTE_UNIT_OUT_ACK [i]->read())
-	      {
-		LABEL("EXECUTE_UNIT_OUT   [%d] - Transaction accepted",i);
-	      }
-
+	    for (uint32_t j=0; j<_param->_nb_execute_unit_port[i]; j++)
+	      if (in_EXECUTE_UNIT_OUT_VAL [i][j]->read() and out_EXECUTE_UNIT_OUT_ACK [i][j]->read())
+		{
+		  LABEL("EXECUTE_UNIT_OUT   [%d][%d] - Transaction accepted",i,j);
+		}
+	  
 	  for (uint32_t i=0; i<_param->_nb_write_unit; i++)
 	    if (out_WRITE_UNIT_IN_VAL [i]->read() and in_WRITE_UNIT_IN_ACK [i]->read())
@@ -318,40 +330,53 @@
 		nb_request_out ++;
 		
-		Tpacket_t packet = (_param->_have_port_packet_id)?out_WRITE_UNIT_IN_PACKET_ID[i]->read():0;
-		LABEL("  * packet           : %d",packet);		
-		uint32_t execute_unit;
+		Tpacket_t packet = (_param->_have_port_rob_ptr  )?out_WRITE_UNIT_IN_PACKET_ID[i]->read():0;
+		LABEL("  * packet              : %d",packet);		
 
 		// find execute_unit
-		for (execute_unit=0; execute_unit<_param->_nb_execute_unit; execute_unit++)
-		  if (packet == ((_param->_have_port_packet_id)?request[execute_unit].front()._packet_id:0))
-		    break;
-
-		LABEL("  * execute_unit source : %d",execute_unit);
-
-		if (_param->_have_port_packet_id)
-		TEST(Tcontext_t        ,out_WRITE_UNIT_IN_PACKET_ID            [i]->read(), request[execute_unit].front()._packet_id            );
+		uint32_t x = 0;
+		uint32_t y = 0;
+		bool     find = false;
+		for (x=0; x<_param->_nb_execute_unit; x++)
+		  {
+		    for (y=0; y<_param->_nb_execute_unit_port[x]; y++)
+		      if (packet == ((_param->_have_port_rob_ptr  )?request[x][y].front()._packet_id:0))
+			{
+			  find = true;
+			  break;
+			}
+		    if (find)
+		      break;
+		  }
+
+		LABEL("  * execute_unit source : %d",x);
+		LABEL("  * execute_unit port   : %d",y);
+		TEST(bool,x<_param->_nb_execute_unit, true);
+		TEST(bool,y<_param->_nb_execute_unit_port[x],true);
+		
+		if (_param->_have_port_rob_ptr  )
+		TEST(Tpacket_t         ,packet                                            , request[x][y].front()._packet_id            );
 
 		// Authorised link ? execute_unit -> write_unit
-		TEST(bool, _param->_table_routing[execute_unit][i], true);
+		TEST(bool, _param->_table_routing[x][y][i], true);
 
 		if (_param->_have_port_context_id)
-		TEST(Tcontext_t        ,out_WRITE_UNIT_IN_CONTEXT_ID           [i]->read(), request[execute_unit].front()._context_id           );
+		TEST(Tcontext_t        ,out_WRITE_UNIT_IN_CONTEXT_ID           [i]->read(), request[x][y].front()._context_id           );
 		if (_param->_have_port_front_end_id)
-		TEST(Tcontext_t        ,out_WRITE_UNIT_IN_FRONT_END_ID         [i]->read(), request[execute_unit].front()._front_end_id         );
+		TEST(Tcontext_t        ,out_WRITE_UNIT_IN_FRONT_END_ID         [i]->read(), request[x][y].front()._front_end_id         );
 		if (_param->_have_port_ooo_engine_id)
-		TEST(Tcontext_t        ,out_WRITE_UNIT_IN_OOO_ENGINE_ID        [i]->read(), request[execute_unit].front()._ooo_engine_id        );
-// 		TEST(Toperation_t      ,out_WRITE_UNIT_IN_OPERATION            [i]->read(), request[execute_unit].front()._operation            );
-		TEST(Ttype_t           ,out_WRITE_UNIT_IN_TYPE                 [i]->read(), request[execute_unit].front()._type                 );
-		TEST(Tcontrol_t        ,out_WRITE_UNIT_IN_WRITE_RD             [i]->read(), request[execute_unit].front()._write_rd             );
-		TEST(Tgeneral_address_t,out_WRITE_UNIT_IN_NUM_REG_RD           [i]->read(), request[execute_unit].front()._num_reg_rd           );
-		TEST(Tgeneral_data_t   ,out_WRITE_UNIT_IN_DATA_RD              [i]->read(), request[execute_unit].front()._data_rd              );
-		TEST(Tcontrol_t        ,out_WRITE_UNIT_IN_WRITE_RE             [i]->read(), request[execute_unit].front()._write_re             );
-		TEST(Tspecial_address_t,out_WRITE_UNIT_IN_NUM_REG_RE           [i]->read(), request[execute_unit].front()._num_reg_re           );
-		TEST(Tspecial_data_t   ,out_WRITE_UNIT_IN_DATA_RE              [i]->read(), request[execute_unit].front()._data_re              );
-		TEST(Texception_t      ,out_WRITE_UNIT_IN_EXCEPTION            [i]->read(), request[execute_unit].front()._exception            );
-		TEST(Tcontrol_t        ,out_WRITE_UNIT_IN_NO_SEQUENCE          [i]->read(), request[execute_unit].front()._no_sequence          );
-		TEST(Tgeneral_data_t   ,out_WRITE_UNIT_IN_ADDRESS              [i]->read(), request[execute_unit].front()._address              );
+		TEST(Tcontext_t        ,out_WRITE_UNIT_IN_OOO_ENGINE_ID        [i]->read(), request[x][y].front()._ooo_engine_id        );
+// 		TEST(Toperation_t      ,out_WRITE_UNIT_IN_OPERATION            [i]->read(), request[x][y].front()._operation            );
+		TEST(Ttype_t           ,out_WRITE_UNIT_IN_TYPE                 [i]->read(), request[x][y].front()._type                 );
+		TEST(Tcontrol_t        ,out_WRITE_UNIT_IN_WRITE_RD             [i]->read(), request[x][y].front()._write_rd             );
+		TEST(Tgeneral_address_t,out_WRITE_UNIT_IN_NUM_REG_RD           [i]->read(), request[x][y].front()._num_reg_rd           );
+		TEST(Tgeneral_data_t   ,out_WRITE_UNIT_IN_DATA_RD              [i]->read(), request[x][y].front()._data_rd              );
+		TEST(Tcontrol_t        ,out_WRITE_UNIT_IN_WRITE_RE             [i]->read(), request[x][y].front()._write_re             );
+		TEST(Tspecial_address_t,out_WRITE_UNIT_IN_NUM_REG_RE           [i]->read(), request[x][y].front()._num_reg_re           );
+		TEST(Tspecial_data_t   ,out_WRITE_UNIT_IN_DATA_RE              [i]->read(), request[x][y].front()._data_re              );
+		TEST(Texception_t      ,out_WRITE_UNIT_IN_EXCEPTION            [i]->read(), request[x][y].front()._exception            );
+		TEST(Tcontrol_t        ,out_WRITE_UNIT_IN_NO_SEQUENCE          [i]->read(), request[x][y].front()._no_sequence          );
+		TEST(Tgeneral_data_t   ,out_WRITE_UNIT_IN_ADDRESS              [i]->read(), request[x][y].front()._address              );
 		
-		request[execute_unit].pop_front();
+		request[x][y].pop_front();
 	      }
 	  SC_START(1);
@@ -372,39 +397,39 @@
   delete in_NRESET;
 
-  delete []  in_EXECUTE_UNIT_OUT_VAL          ;
-  delete [] out_EXECUTE_UNIT_OUT_ACK          ;
-  delete []  in_EXECUTE_UNIT_OUT_CONTEXT_ID   ;
-  delete []  in_EXECUTE_UNIT_OUT_FRONT_END_ID ;
-  delete []  in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID;
-  delete []  in_EXECUTE_UNIT_OUT_PACKET_ID    ;
-//delete []  in_EXECUTE_UNIT_OUT_OPERATION    ;
-  delete []  in_EXECUTE_UNIT_OUT_TYPE         ;
-  delete []  in_EXECUTE_UNIT_OUT_WRITE_RD     ;
-  delete []  in_EXECUTE_UNIT_OUT_NUM_REG_RD   ;
-  delete []  in_EXECUTE_UNIT_OUT_DATA_RD      ;
-  delete []  in_EXECUTE_UNIT_OUT_WRITE_RE     ;
-  delete []  in_EXECUTE_UNIT_OUT_NUM_REG_RE   ;
-  delete []  in_EXECUTE_UNIT_OUT_DATA_RE      ;
-  delete []  in_EXECUTE_UNIT_OUT_EXCEPTION    ;
-  delete []  in_EXECUTE_UNIT_OUT_NO_SEQUENCE  ;
-  delete []  in_EXECUTE_UNIT_OUT_ADDRESS      ;
-
-  delete [] out_WRITE_UNIT_IN_VAL             ;
-  delete []  in_WRITE_UNIT_IN_ACK             ;
-  delete [] out_WRITE_UNIT_IN_CONTEXT_ID      ;
-  delete [] out_WRITE_UNIT_IN_FRONT_END_ID    ;
-  delete [] out_WRITE_UNIT_IN_OOO_ENGINE_ID   ;
-  delete [] out_WRITE_UNIT_IN_PACKET_ID       ;
-//delete [] out_WRITE_UNIT_IN_OPERATION       ;
-  delete [] out_WRITE_UNIT_IN_TYPE            ;
-  delete [] out_WRITE_UNIT_IN_WRITE_RD        ;
-  delete [] out_WRITE_UNIT_IN_NUM_REG_RD      ;
-  delete [] out_WRITE_UNIT_IN_DATA_RD         ;
-  delete [] out_WRITE_UNIT_IN_WRITE_RE        ;
-  delete [] out_WRITE_UNIT_IN_NUM_REG_RE      ;
-  delete [] out_WRITE_UNIT_IN_DATA_RE         ;
-  delete [] out_WRITE_UNIT_IN_EXCEPTION       ;
-  delete [] out_WRITE_UNIT_IN_NO_SEQUENCE     ;
-  delete [] out_WRITE_UNIT_IN_ADDRESS         ;
+  DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_VAL          ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  DELETE2_SC_SIGNAL(out_EXECUTE_UNIT_OUT_ACK          ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_CONTEXT_ID   ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_FRONT_END_ID ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_PACKET_ID    ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+//DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_OPERATION    ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_TYPE         ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_WRITE_RD     ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_NUM_REG_RD   ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_DATA_RD      ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_WRITE_RE     ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_NUM_REG_RE   ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_DATA_RE      ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_EXCEPTION    ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_NO_SEQUENCE  ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+  DELETE2_SC_SIGNAL( in_EXECUTE_UNIT_OUT_ADDRESS      ,_param->_nb_execute_unit,_param->_nb_execute_unit_port[it1]);
+
+  DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_VAL             ,_param->_nb_write_unit  );
+  DELETE1_SC_SIGNAL( in_WRITE_UNIT_IN_ACK             ,_param->_nb_write_unit  );
+  DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_CONTEXT_ID      ,_param->_nb_write_unit  );
+  DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_FRONT_END_ID    ,_param->_nb_write_unit  );
+  DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_OOO_ENGINE_ID   ,_param->_nb_write_unit  );
+  DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_PACKET_ID       ,_param->_nb_write_unit  );
+//DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_OPERATION       ,_param->_nb_write_unit  );
+  DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_TYPE            ,_param->_nb_write_unit  );
+  DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_WRITE_RD        ,_param->_nb_write_unit  );
+  DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_NUM_REG_RD      ,_param->_nb_write_unit  );
+  DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_DATA_RD         ,_param->_nb_write_unit  );
+  DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_WRITE_RE        ,_param->_nb_write_unit  );
+  DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_NUM_REG_RE      ,_param->_nb_write_unit  );
+  DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_DATA_RE         ,_param->_nb_write_unit  );
+  DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_EXCEPTION       ,_param->_nb_write_unit  );
+  DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_NO_SEQUENCE     ,_param->_nb_write_unit  );
+  DELETE1_SC_SIGNAL(out_WRITE_UNIT_IN_ADDRESS         ,_param->_nb_write_unit  );
 #endif
 
