Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/src/Execution_unit_to_Write_unit.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/src/Execution_unit_to_Write_unit.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/src/Execution_unit_to_Write_unit.cpp	(revision 88)
@@ -38,4 +38,10 @@
     log_printf(FUNC,Execution_unit_to_Write_unit,FUNCTION,"Begin");
 
+#if DEBUG_Execution_unit_to_Write_unit == true
+    log_printf(INFO,Execution_unit_to_Write_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
+
+    std::cout << *param << std::endl;
+#endif    
+
     log_printf(INFO,Execution_unit_to_Write_unit,FUNCTION,"Allocation");
 
@@ -47,5 +53,5 @@
 
 #ifdef STATISTICS
-    if (_usage & USE_STATISTICS)
+    if (usage_is_set(_usage,USE_STATISTICS))
       {	
 	log_printf(INFO,Execution_unit_to_Write_unit,FUNCTION,"Allocation of statistics");
@@ -56,5 +62,5 @@
 
 #ifdef VHDL
-    if (_usage & USE_VHDL)
+    if (usage_is_set(_usage,USE_VHDL))
       {
 	// generate the vhdl
@@ -66,5 +72,5 @@
 
 #ifdef SYSTEMC
-    if (_usage & USE_SYSTEMC)
+    if (usage_is_set(_usage,USE_SYSTEMC))
       {
 	log_printf(INFO,Execution_unit_to_Write_unit,FUNCTION,"Method - transition");
@@ -84,27 +90,28 @@
 	sensitive << (*(in_CLOCK)).pos();
 	for (uint32_t i=0; i<_param->_nb_execute_unit; i++)
-	  {
-	    if (_param->_have_port_context_id)
-            sensitive << (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [i]));
-            if (_param->_have_port_front_end_id)
-	    sensitive << (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [i]));
-            if (_param->_have_port_ooo_engine_id)
-	    sensitive << (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [i]));
-            if (_param->_have_port_packet_id)
-	    sensitive << (*(in_EXECUTE_UNIT_OUT_PACKET_ID     [i]));
-
- 	    sensitive << (*(in_EXECUTE_UNIT_OUT_VAL           [i]))
-	            //<< (*(in_EXECUTE_UNIT_OUT_OPERATION     [i]))
-	            //<< (*(in_EXECUTE_UNIT_OUT_TYPE          [i]))
-		      << (*(in_EXECUTE_UNIT_OUT_WRITE_RD      [i]))
-		      << (*(in_EXECUTE_UNIT_OUT_NUM_REG_RD    [i]))
-		      << (*(in_EXECUTE_UNIT_OUT_DATA_RD       [i]))
-		      << (*(in_EXECUTE_UNIT_OUT_WRITE_RE      [i]))
-		      << (*(in_EXECUTE_UNIT_OUT_NUM_REG_RE    [i]))
-		      << (*(in_EXECUTE_UNIT_OUT_DATA_RE       [i]))
-		      << (*(in_EXECUTE_UNIT_OUT_EXCEPTION     [i]))
-		      << (*(in_EXECUTE_UNIT_OUT_NO_SEQUENCE   [i]))
-		      << (*(in_EXECUTE_UNIT_OUT_ADDRESS       [i]));
-	  }
+	  for (uint32_t j=0; j<_param->_nb_execute_unit_port[i]; j++)
+	    {
+	      if (_param->_have_port_context_id)
+              sensitive << (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [i][j]));
+              if (_param->_have_port_front_end_id)
+	      sensitive << (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [i][j]));
+              if (_param->_have_port_ooo_engine_id)
+	      sensitive << (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [i][j]));
+              if (_param->_have_port_rob_ptr  )
+	      sensitive << (*(in_EXECUTE_UNIT_OUT_PACKET_ID     [i][j]));
+	      
+ 	      sensitive << (*(in_EXECUTE_UNIT_OUT_VAL           [i][j]))
+		      //<< (*(in_EXECUTE_UNIT_OUT_OPERATION     [i][j]))
+		      //<< (*(in_EXECUTE_UNIT_OUT_TYPE          [i][j]))
+			<< (*(in_EXECUTE_UNIT_OUT_WRITE_RD      [i][j]))
+			<< (*(in_EXECUTE_UNIT_OUT_NUM_REG_RD    [i][j]))
+			<< (*(in_EXECUTE_UNIT_OUT_DATA_RD       [i][j]))
+			<< (*(in_EXECUTE_UNIT_OUT_WRITE_RE      [i][j]))
+			<< (*(in_EXECUTE_UNIT_OUT_NUM_REG_RE    [i][j]))
+			<< (*(in_EXECUTE_UNIT_OUT_DATA_RE       [i][j]))
+			<< (*(in_EXECUTE_UNIT_OUT_EXCEPTION     [i][j]))
+			<< (*(in_EXECUTE_UNIT_OUT_NO_SEQUENCE   [i][j]))
+			<< (*(in_EXECUTE_UNIT_OUT_ADDRESS       [i][j]));
+	    }
 	for (uint32_t i=0; i<_param->_nb_write_unit; i++)
 	  sensitive << (*(in_WRITE_UNIT_IN_ACK [i]));
@@ -113,29 +120,31 @@
 	// List dependency information
 	for (uint32_t i=0; i<_param->_nb_execute_unit; i++)
-	  {
-	    (*(out_EXECUTE_UNIT_OUT_ACK [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [i]));
-	    if (_param->_have_port_context_id)
-	    (*(out_EXECUTE_UNIT_OUT_ACK [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [i]));
-	    if (_param->_have_port_front_end_id)
-	    (*(out_EXECUTE_UNIT_OUT_ACK [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [i]));
-	    if (_param->_have_port_ooo_engine_id)
-	    (*(out_EXECUTE_UNIT_OUT_ACK [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [i]));
-
-	    for (uint32_t j=0; j<_param->_nb_write_unit; j++)
-	      (*(out_EXECUTE_UNIT_OUT_ACK [i])) (*(in_WRITE_UNIT_IN_ACK [j])); 
-	  }
+	  for (uint32_t j=0; j<_param->_nb_execute_unit_port[i]; j++)
+	    {
+	      (*(out_EXECUTE_UNIT_OUT_ACK [i][j])) (*(in_EXECUTE_UNIT_OUT_VAL           [i][j]));
+	      if (_param->_have_port_context_id)
+	      (*(out_EXECUTE_UNIT_OUT_ACK [i][j])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [i][j]));
+	      if (_param->_have_port_front_end_id)
+	      (*(out_EXECUTE_UNIT_OUT_ACK [i][j])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [i][j]));
+	      if (_param->_have_port_ooo_engine_id)
+	      (*(out_EXECUTE_UNIT_OUT_ACK [i][j])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [i][j]));
+
+	      for (uint32_t x=0; x<_param->_nb_write_unit; x++)
+		(*(out_EXECUTE_UNIT_OUT_ACK [i][j])) (*(in_WRITE_UNIT_IN_ACK [x])); 
+	    }
 
 	for (uint32_t i=0; i<_param->_nb_write_unit; i++)
 	  {
 	    (*(out_WRITE_UNIT_IN_VAL [i])) (*(in_WRITE_UNIT_IN_ACK [i])); 
-	    for (uint32_t j=0; j<_param->_nb_execute_unit; j++)
-	      {
-		(*(out_WRITE_UNIT_IN_VAL [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [j]));
-		if (_param->_have_port_context_id)
-		(*(out_WRITE_UNIT_IN_VAL [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [j]));
-		if (_param->_have_port_front_end_id)
-		(*(out_WRITE_UNIT_IN_VAL [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [j]));
-		if (_param->_have_port_ooo_engine_id)
-		(*(out_WRITE_UNIT_IN_VAL [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [j]));
+	    for (uint32_t x=0; x<_param->_nb_execute_unit; x++)
+	      for (uint32_t y=0; y<_param->_nb_execute_unit_port[x]; y++)
+	      {
+		(*(out_WRITE_UNIT_IN_VAL [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [x][y]));
+		if (_param->_have_port_context_id)
+		(*(out_WRITE_UNIT_IN_VAL [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [x][y]));
+		if (_param->_have_port_front_end_id)
+		(*(out_WRITE_UNIT_IN_VAL [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [x][y]));
+		if (_param->_have_port_ooo_engine_id)
+		(*(out_WRITE_UNIT_IN_VAL [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [x][y]));
 	      }
 
@@ -143,13 +152,14 @@
 	      {
 	    (*(out_WRITE_UNIT_IN_CONTEXT_ID [i])) (*(in_WRITE_UNIT_IN_ACK [i])); 
-	    for (uint32_t j=0; j<_param->_nb_execute_unit; j++)
-	      {
-		(*(out_WRITE_UNIT_IN_CONTEXT_ID [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [j]));
-		if (_param->_have_port_context_id)
-		(*(out_WRITE_UNIT_IN_CONTEXT_ID [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [j]));
-		if (_param->_have_port_front_end_id)
-		(*(out_WRITE_UNIT_IN_CONTEXT_ID [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [j]));
-		if (_param->_have_port_ooo_engine_id)
-		(*(out_WRITE_UNIT_IN_CONTEXT_ID [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [j]));
+	    for (uint32_t x=0; x<_param->_nb_execute_unit; x++)
+	      for (uint32_t y=0; y<_param->_nb_execute_unit_port[x]; y++)
+	      {
+		(*(out_WRITE_UNIT_IN_CONTEXT_ID [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [x][y]));
+		if (_param->_have_port_context_id)
+		(*(out_WRITE_UNIT_IN_CONTEXT_ID [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [x][y]));
+		if (_param->_have_port_front_end_id)
+		(*(out_WRITE_UNIT_IN_CONTEXT_ID [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [x][y]));
+		if (_param->_have_port_ooo_engine_id)
+		(*(out_WRITE_UNIT_IN_CONTEXT_ID [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [x][y]));
 	      }
 	      }
@@ -157,13 +167,14 @@
 	      {
 	    (*(out_WRITE_UNIT_IN_FRONT_END_ID [i])) (*(in_WRITE_UNIT_IN_ACK [i])); 
-	    for (uint32_t j=0; j<_param->_nb_execute_unit; j++)
-	      {
-		(*(out_WRITE_UNIT_IN_FRONT_END_ID [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [j]));
-		if (_param->_have_port_context_id)
-		(*(out_WRITE_UNIT_IN_FRONT_END_ID [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [j]));
-		if (_param->_have_port_front_end_id)
-		(*(out_WRITE_UNIT_IN_FRONT_END_ID [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [j]));
-		if (_param->_have_port_ooo_engine_id)
-		(*(out_WRITE_UNIT_IN_FRONT_END_ID [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [j]));
+	    for (uint32_t x=0; x<_param->_nb_execute_unit; x++)
+	      for (uint32_t y=0; y<_param->_nb_execute_unit_port[x]; y++)
+	      {
+		(*(out_WRITE_UNIT_IN_FRONT_END_ID [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [x][y]));
+		if (_param->_have_port_context_id)
+		(*(out_WRITE_UNIT_IN_FRONT_END_ID [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [x][y]));
+		if (_param->_have_port_front_end_id)
+		(*(out_WRITE_UNIT_IN_FRONT_END_ID [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [x][y]));
+		if (_param->_have_port_ooo_engine_id)
+		(*(out_WRITE_UNIT_IN_FRONT_END_ID [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [x][y]));
 	      }
 	      }
@@ -171,175 +182,187 @@
 	      {
 	    (*(out_WRITE_UNIT_IN_OOO_ENGINE_ID [i])) (*(in_WRITE_UNIT_IN_ACK [i])); 
-	    for (uint32_t j=0; j<_param->_nb_execute_unit; j++)
-	      {
-		(*(out_WRITE_UNIT_IN_OOO_ENGINE_ID [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [j]));
-		if (_param->_have_port_context_id)
-		(*(out_WRITE_UNIT_IN_OOO_ENGINE_ID [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [j]));
-		if (_param->_have_port_front_end_id)
-		(*(out_WRITE_UNIT_IN_OOO_ENGINE_ID [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [j]));
-		if (_param->_have_port_ooo_engine_id)
-		(*(out_WRITE_UNIT_IN_OOO_ENGINE_ID [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [j]));
-	      }
-	      }
-
-	    if (_param->_have_port_packet_id)
+	    for (uint32_t x=0; x<_param->_nb_execute_unit; x++)
+	      for (uint32_t y=0; y<_param->_nb_execute_unit_port[x]; y++)
+	      {
+		(*(out_WRITE_UNIT_IN_OOO_ENGINE_ID [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [x][y]));
+		if (_param->_have_port_context_id)
+		(*(out_WRITE_UNIT_IN_OOO_ENGINE_ID [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [x][y]));
+		if (_param->_have_port_front_end_id)
+		(*(out_WRITE_UNIT_IN_OOO_ENGINE_ID [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [x][y]));
+		if (_param->_have_port_ooo_engine_id)
+		(*(out_WRITE_UNIT_IN_OOO_ENGINE_ID [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [x][y]));
+	      }
+	      }
+
+	    if (_param->_have_port_rob_ptr  )
 	      {
 	    (*(out_WRITE_UNIT_IN_PACKET_ID [i])) (*(in_WRITE_UNIT_IN_ACK [i])); 
-	    for (uint32_t j=0; j<_param->_nb_execute_unit; j++)
-	      {
-		(*(out_WRITE_UNIT_IN_PACKET_ID [i])) (*(in_EXECUTE_UNIT_OUT_PACKET_ID [j]));
-		(*(out_WRITE_UNIT_IN_PACKET_ID [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [j]));
-		if (_param->_have_port_context_id)
-		(*(out_WRITE_UNIT_IN_PACKET_ID [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [j]));
-		if (_param->_have_port_front_end_id)
-		(*(out_WRITE_UNIT_IN_PACKET_ID [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [j]));
-		if (_param->_have_port_ooo_engine_id)
-		(*(out_WRITE_UNIT_IN_PACKET_ID [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [j]));
+	    for (uint32_t x=0; x<_param->_nb_execute_unit; x++)
+	      for (uint32_t y=0; y<_param->_nb_execute_unit_port[x]; y++)
+	      {
+		(*(out_WRITE_UNIT_IN_PACKET_ID [i])) (*(in_EXECUTE_UNIT_OUT_PACKET_ID [x][y]));
+		(*(out_WRITE_UNIT_IN_PACKET_ID [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [x][y]));
+		if (_param->_have_port_context_id)
+		(*(out_WRITE_UNIT_IN_PACKET_ID [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [x][y]));
+		if (_param->_have_port_front_end_id)
+		(*(out_WRITE_UNIT_IN_PACKET_ID [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [x][y]));
+		if (_param->_have_port_ooo_engine_id)
+		(*(out_WRITE_UNIT_IN_PACKET_ID [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [x][y]));
 	      }
 	      }
 
 // 	    (*(out_WRITE_UNIT_IN_OPERATION [i])) (*(in_WRITE_UNIT_IN_ACK [i])); 
-// 	    for (uint32_t j=0; j<_param->_nb_execute_unit; j++)
+// 	    for (uint32_t x=0; x<_param->_nb_execute_unit; x++)
+// 	      for (uint32_t y=0; y<_param->_nb_execute_unit_port[x]; y++)
 // 	      {
-// 		(*(out_WRITE_UNIT_IN_OPERATION [i])) (*(in_EXECUTE_UNIT_OUT_OPERATION [j]));
-// 		(*(out_WRITE_UNIT_IN_OPERATION [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [j]));
+// 		(*(out_WRITE_UNIT_IN_OPERATION [i])) (*(in_EXECUTE_UNIT_OUT_OPERATION [x][y]));
+// 		(*(out_WRITE_UNIT_IN_OPERATION [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [x][y]));
 // 		if (_param->_have_port_context_id)
-// 		(*(out_WRITE_UNIT_IN_OPERATION [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [j]));
+// 		(*(out_WRITE_UNIT_IN_OPERATION [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [x][y]));
 // 		if (_param->_have_port_front_end_id)
-// 		(*(out_WRITE_UNIT_IN_OPERATION [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [j]));
+// 		(*(out_WRITE_UNIT_IN_OPERATION [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [x][y]));
 // 		if (_param->_have_port_ooo_engine_id)
-// 		(*(out_WRITE_UNIT_IN_OPERATION [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [j]));
+// 		(*(out_WRITE_UNIT_IN_OPERATION [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [x][y]));
 // 	      }
 
 // 	    (*(out_WRITE_UNIT_IN_TYPE [i])) (*(in_WRITE_UNIT_IN_ACK [i])); 
-// 	    for (uint32_t j=0; j<_param->_nb_execute_unit; j++)
+// 	    for (uint32_t x=0; x<_param->_nb_execute_unit; x++)
+// 	      for (uint32_t y=0; y<_param->_nb_execute_unit_port[x]; y++)
 // 	      {
-// 		(*(out_WRITE_UNIT_IN_TYPE [i])) (*(in_EXECUTE_UNIT_OUT_TYPE [j]));
-// 		(*(out_WRITE_UNIT_IN_TYPE [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [j]));
+// 		(*(out_WRITE_UNIT_IN_TYPE [i])) (*(in_EXECUTE_UNIT_OUT_TYPE [x][y]));
+// 		(*(out_WRITE_UNIT_IN_TYPE [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [x][y]));
 // 		if (_param->_have_port_context_id)
-// 		(*(out_WRITE_UNIT_IN_TYPE [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [j]));
+// 		(*(out_WRITE_UNIT_IN_TYPE [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [x][y]));
 // 		if (_param->_have_port_front_end_id)
-// 		(*(out_WRITE_UNIT_IN_TYPE [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [j]));
+// 		(*(out_WRITE_UNIT_IN_TYPE [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [x][y]));
 // 		if (_param->_have_port_ooo_engine_id)
-// 		(*(out_WRITE_UNIT_IN_TYPE [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [j]));
+// 		(*(out_WRITE_UNIT_IN_TYPE [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [x][y]));
 // 	      }
 
 	    (*(out_WRITE_UNIT_IN_WRITE_RD [i])) (*(in_WRITE_UNIT_IN_ACK [i])); 
-	    for (uint32_t j=0; j<_param->_nb_execute_unit; j++)
-	      {
-		(*(out_WRITE_UNIT_IN_WRITE_RD [i])) (*(in_EXECUTE_UNIT_OUT_WRITE_RD [j]));
-		(*(out_WRITE_UNIT_IN_WRITE_RD [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [j]));
-		if (_param->_have_port_context_id)
-		(*(out_WRITE_UNIT_IN_WRITE_RD [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [j]));
-		if (_param->_have_port_front_end_id)
-		(*(out_WRITE_UNIT_IN_WRITE_RD [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [j]));
-		if (_param->_have_port_ooo_engine_id)
-		(*(out_WRITE_UNIT_IN_WRITE_RD [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [j]));
+	    for (uint32_t x=0; x<_param->_nb_execute_unit; x++)
+	      for (uint32_t y=0; y<_param->_nb_execute_unit_port[x]; y++)
+	      {
+		(*(out_WRITE_UNIT_IN_WRITE_RD [i])) (*(in_EXECUTE_UNIT_OUT_WRITE_RD [x][y]));
+		(*(out_WRITE_UNIT_IN_WRITE_RD [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [x][y]));
+		if (_param->_have_port_context_id)
+		(*(out_WRITE_UNIT_IN_WRITE_RD [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [x][y]));
+		if (_param->_have_port_front_end_id)
+		(*(out_WRITE_UNIT_IN_WRITE_RD [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [x][y]));
+		if (_param->_have_port_ooo_engine_id)
+		(*(out_WRITE_UNIT_IN_WRITE_RD [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [x][y]));
 	      }
 
 	    (*(out_WRITE_UNIT_IN_NUM_REG_RD [i])) (*(in_WRITE_UNIT_IN_ACK [i])); 
-	    for (uint32_t j=0; j<_param->_nb_execute_unit; j++)
-	      {
-		(*(out_WRITE_UNIT_IN_NUM_REG_RD [i])) (*(in_EXECUTE_UNIT_OUT_NUM_REG_RD [j]));
-		(*(out_WRITE_UNIT_IN_NUM_REG_RD [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [j]));
-		if (_param->_have_port_context_id)
-		(*(out_WRITE_UNIT_IN_NUM_REG_RD [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [j]));
-		if (_param->_have_port_front_end_id)
-		(*(out_WRITE_UNIT_IN_NUM_REG_RD [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [j]));
-		if (_param->_have_port_ooo_engine_id)
-		(*(out_WRITE_UNIT_IN_NUM_REG_RD [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [j]));
+	    for (uint32_t x=0; x<_param->_nb_execute_unit; x++)
+	      for (uint32_t y=0; y<_param->_nb_execute_unit_port[x]; y++)
+	      {
+		(*(out_WRITE_UNIT_IN_NUM_REG_RD [i])) (*(in_EXECUTE_UNIT_OUT_NUM_REG_RD [x][y]));
+		(*(out_WRITE_UNIT_IN_NUM_REG_RD [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [x][y]));
+		if (_param->_have_port_context_id)
+		(*(out_WRITE_UNIT_IN_NUM_REG_RD [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [x][y]));
+		if (_param->_have_port_front_end_id)
+		(*(out_WRITE_UNIT_IN_NUM_REG_RD [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [x][y]));
+		if (_param->_have_port_ooo_engine_id)
+		(*(out_WRITE_UNIT_IN_NUM_REG_RD [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [x][y]));
 	      }
 
 	    (*(out_WRITE_UNIT_IN_DATA_RD [i])) (*(in_WRITE_UNIT_IN_ACK [i])); 
-	    for (uint32_t j=0; j<_param->_nb_execute_unit; j++)
-	      {
-		(*(out_WRITE_UNIT_IN_DATA_RD [i])) (*(in_EXECUTE_UNIT_OUT_DATA_RD [j]));
-		(*(out_WRITE_UNIT_IN_DATA_RD [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [j]));
-		if (_param->_have_port_context_id)
-		(*(out_WRITE_UNIT_IN_DATA_RD [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [j]));
-		if (_param->_have_port_front_end_id)
-		(*(out_WRITE_UNIT_IN_DATA_RD [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [j]));
-		if (_param->_have_port_ooo_engine_id)
-		(*(out_WRITE_UNIT_IN_DATA_RD [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [j]));
+	    for (uint32_t x=0; x<_param->_nb_execute_unit; x++)
+	      for (uint32_t y=0; y<_param->_nb_execute_unit_port[x]; y++)
+	      {
+		(*(out_WRITE_UNIT_IN_DATA_RD [i])) (*(in_EXECUTE_UNIT_OUT_DATA_RD [x][y]));
+		(*(out_WRITE_UNIT_IN_DATA_RD [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [x][y]));
+		if (_param->_have_port_context_id)
+		(*(out_WRITE_UNIT_IN_DATA_RD [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [x][y]));
+		if (_param->_have_port_front_end_id)
+		(*(out_WRITE_UNIT_IN_DATA_RD [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [x][y]));
+		if (_param->_have_port_ooo_engine_id)
+		(*(out_WRITE_UNIT_IN_DATA_RD [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [x][y]));
 	      }
 
 	    (*(out_WRITE_UNIT_IN_WRITE_RE [i])) (*(in_WRITE_UNIT_IN_ACK [i])); 
-	    for (uint32_t j=0; j<_param->_nb_execute_unit; j++)
-	      {
-		(*(out_WRITE_UNIT_IN_WRITE_RE [i])) (*(in_EXECUTE_UNIT_OUT_WRITE_RE [j]));
-		(*(out_WRITE_UNIT_IN_WRITE_RE [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [j]));
-		if (_param->_have_port_context_id)
-		(*(out_WRITE_UNIT_IN_WRITE_RE [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [j]));
-		if (_param->_have_port_front_end_id)
-		(*(out_WRITE_UNIT_IN_WRITE_RE [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [j]));
-		if (_param->_have_port_ooo_engine_id)
-		(*(out_WRITE_UNIT_IN_WRITE_RE [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [j]));
+	    for (uint32_t x=0; x<_param->_nb_execute_unit; x++)
+	      for (uint32_t y=0; y<_param->_nb_execute_unit_port[x]; y++)
+	      {
+		(*(out_WRITE_UNIT_IN_WRITE_RE [i])) (*(in_EXECUTE_UNIT_OUT_WRITE_RE [x][y]));
+		(*(out_WRITE_UNIT_IN_WRITE_RE [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [x][y]));
+		if (_param->_have_port_context_id)
+		(*(out_WRITE_UNIT_IN_WRITE_RE [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [x][y]));
+		if (_param->_have_port_front_end_id)
+		(*(out_WRITE_UNIT_IN_WRITE_RE [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [x][y]));
+		if (_param->_have_port_ooo_engine_id)
+		(*(out_WRITE_UNIT_IN_WRITE_RE [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [x][y]));
 	      }
 
 	    (*(out_WRITE_UNIT_IN_NUM_REG_RE [i])) (*(in_WRITE_UNIT_IN_ACK [i])); 
-	    for (uint32_t j=0; j<_param->_nb_execute_unit; j++)
-	      {
-		(*(out_WRITE_UNIT_IN_NUM_REG_RE [i])) (*(in_EXECUTE_UNIT_OUT_NUM_REG_RE [j]));
-		(*(out_WRITE_UNIT_IN_NUM_REG_RE [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [j]));
-		if (_param->_have_port_context_id)
-		(*(out_WRITE_UNIT_IN_NUM_REG_RE [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [j]));
-		if (_param->_have_port_front_end_id)
-		(*(out_WRITE_UNIT_IN_NUM_REG_RE [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [j]));
-		if (_param->_have_port_ooo_engine_id)
-		(*(out_WRITE_UNIT_IN_NUM_REG_RE [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [j]));
+	    for (uint32_t x=0; x<_param->_nb_execute_unit; x++)
+	      for (uint32_t y=0; y<_param->_nb_execute_unit_port[x]; y++)
+	      {
+		(*(out_WRITE_UNIT_IN_NUM_REG_RE [i])) (*(in_EXECUTE_UNIT_OUT_NUM_REG_RE [x][y]));
+		(*(out_WRITE_UNIT_IN_NUM_REG_RE [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [x][y]));
+		if (_param->_have_port_context_id)
+		(*(out_WRITE_UNIT_IN_NUM_REG_RE [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [x][y]));
+		if (_param->_have_port_front_end_id)
+		(*(out_WRITE_UNIT_IN_NUM_REG_RE [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [x][y]));
+		if (_param->_have_port_ooo_engine_id)
+		(*(out_WRITE_UNIT_IN_NUM_REG_RE [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [x][y]));
 	      }
 
 	    (*(out_WRITE_UNIT_IN_DATA_RE [i])) (*(in_WRITE_UNIT_IN_ACK [i])); 
-	    for (uint32_t j=0; j<_param->_nb_execute_unit; j++)
-	      {
-		(*(out_WRITE_UNIT_IN_DATA_RE [i])) (*(in_EXECUTE_UNIT_OUT_DATA_RE [j]));
-		(*(out_WRITE_UNIT_IN_DATA_RE [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [j]));
-		if (_param->_have_port_context_id)
-		(*(out_WRITE_UNIT_IN_DATA_RE [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [j]));
-		if (_param->_have_port_front_end_id)
-		(*(out_WRITE_UNIT_IN_DATA_RE [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [j]));
-		if (_param->_have_port_ooo_engine_id)
-		(*(out_WRITE_UNIT_IN_DATA_RE [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [j]));
+	    for (uint32_t x=0; x<_param->_nb_execute_unit; x++)
+	      for (uint32_t y=0; y<_param->_nb_execute_unit_port[x]; y++)
+	      {
+		(*(out_WRITE_UNIT_IN_DATA_RE [i])) (*(in_EXECUTE_UNIT_OUT_DATA_RE [x][y]));
+		(*(out_WRITE_UNIT_IN_DATA_RE [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [x][y]));
+		if (_param->_have_port_context_id)
+		(*(out_WRITE_UNIT_IN_DATA_RE [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [x][y]));
+		if (_param->_have_port_front_end_id)
+		(*(out_WRITE_UNIT_IN_DATA_RE [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [x][y]));
+		if (_param->_have_port_ooo_engine_id)
+		(*(out_WRITE_UNIT_IN_DATA_RE [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [x][y]));
 	      }
 
 	    (*(out_WRITE_UNIT_IN_EXCEPTION [i])) (*(in_WRITE_UNIT_IN_ACK [i])); 
-	    for (uint32_t j=0; j<_param->_nb_execute_unit; j++)
-	      {
-		(*(out_WRITE_UNIT_IN_EXCEPTION [i])) (*(in_EXECUTE_UNIT_OUT_EXCEPTION [j]));
-		(*(out_WRITE_UNIT_IN_EXCEPTION [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [j]));
-		if (_param->_have_port_context_id)
-		(*(out_WRITE_UNIT_IN_EXCEPTION [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [j]));
-		if (_param->_have_port_front_end_id)
-		(*(out_WRITE_UNIT_IN_EXCEPTION [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [j]));
-		if (_param->_have_port_ooo_engine_id)
-		(*(out_WRITE_UNIT_IN_EXCEPTION [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [j]));
+	    for (uint32_t x=0; x<_param->_nb_execute_unit; x++)
+	      for (uint32_t y=0; y<_param->_nb_execute_unit_port[x]; y++)
+	      {
+		(*(out_WRITE_UNIT_IN_EXCEPTION [i])) (*(in_EXECUTE_UNIT_OUT_EXCEPTION [x][y]));
+		(*(out_WRITE_UNIT_IN_EXCEPTION [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [x][y]));
+		if (_param->_have_port_context_id)
+		(*(out_WRITE_UNIT_IN_EXCEPTION [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [x][y]));
+		if (_param->_have_port_front_end_id)
+		(*(out_WRITE_UNIT_IN_EXCEPTION [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [x][y]));
+		if (_param->_have_port_ooo_engine_id)
+		(*(out_WRITE_UNIT_IN_EXCEPTION [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [x][y]));
 	      }
 
 	    (*(out_WRITE_UNIT_IN_NO_SEQUENCE [i])) (*(in_WRITE_UNIT_IN_ACK [i])); 
-	    for (uint32_t j=0; j<_param->_nb_execute_unit; j++)
-	      {
-		(*(out_WRITE_UNIT_IN_NO_SEQUENCE [i])) (*(in_EXECUTE_UNIT_OUT_NO_SEQUENCE [j]));
-		(*(out_WRITE_UNIT_IN_NO_SEQUENCE [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [j]));
-		if (_param->_have_port_context_id)
-		(*(out_WRITE_UNIT_IN_NO_SEQUENCE [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [j]));
-		if (_param->_have_port_front_end_id)
-		(*(out_WRITE_UNIT_IN_NO_SEQUENCE [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [j]));
-		if (_param->_have_port_ooo_engine_id)
-		(*(out_WRITE_UNIT_IN_NO_SEQUENCE [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [j]));
+	    for (uint32_t x=0; x<_param->_nb_execute_unit; x++)
+	      for (uint32_t y=0; y<_param->_nb_execute_unit_port[x]; y++)
+	      {
+		(*(out_WRITE_UNIT_IN_NO_SEQUENCE [i])) (*(in_EXECUTE_UNIT_OUT_NO_SEQUENCE [x][y]));
+		(*(out_WRITE_UNIT_IN_NO_SEQUENCE [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [x][y]));
+		if (_param->_have_port_context_id)
+		(*(out_WRITE_UNIT_IN_NO_SEQUENCE [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [x][y]));
+		if (_param->_have_port_front_end_id)
+		(*(out_WRITE_UNIT_IN_NO_SEQUENCE [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [x][y]));
+		if (_param->_have_port_ooo_engine_id)
+		(*(out_WRITE_UNIT_IN_NO_SEQUENCE [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [x][y]));
 	      }
 
 	    (*(out_WRITE_UNIT_IN_ADDRESS [i])) (*(in_WRITE_UNIT_IN_ACK [i])); 
-	    for (uint32_t j=0; j<_param->_nb_execute_unit; j++)
-	      {
-		(*(out_WRITE_UNIT_IN_ADDRESS [i])) (*(in_EXECUTE_UNIT_OUT_ADDRESS [j]));
-		(*(out_WRITE_UNIT_IN_ADDRESS [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [j]));
-		if (_param->_have_port_context_id)
-		(*(out_WRITE_UNIT_IN_ADDRESS [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [j]));
-		if (_param->_have_port_front_end_id)
-		(*(out_WRITE_UNIT_IN_ADDRESS [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [j]));
-		if (_param->_have_port_ooo_engine_id)
-		(*(out_WRITE_UNIT_IN_ADDRESS [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [j]));
-	      }
-
+	    for (uint32_t x=0; x<_param->_nb_execute_unit; x++)
+	      for (uint32_t y=0; y<_param->_nb_execute_unit_port[x]; y++)
+	      {
+		(*(out_WRITE_UNIT_IN_ADDRESS [i])) (*(in_EXECUTE_UNIT_OUT_ADDRESS [x][y]));
+		(*(out_WRITE_UNIT_IN_ADDRESS [i])) (*(in_EXECUTE_UNIT_OUT_VAL           [x][y]));
+		if (_param->_have_port_context_id)
+		(*(out_WRITE_UNIT_IN_ADDRESS [i])) (*(in_EXECUTE_UNIT_OUT_CONTEXT_ID    [x][y]));
+		if (_param->_have_port_front_end_id)
+		(*(out_WRITE_UNIT_IN_ADDRESS [i])) (*(in_EXECUTE_UNIT_OUT_FRONT_END_ID  [x][y]));
+		if (_param->_have_port_ooo_engine_id)
+		(*(out_WRITE_UNIT_IN_ADDRESS [i])) (*(in_EXECUTE_UNIT_OUT_OOO_ENGINE_ID [x][y]));
+	      }
 	  }
 # endif    
@@ -357,5 +380,5 @@
 
 #ifdef STATISTICS
-    if (_usage & USE_STATISTICS)
+    if (usage_is_set(_usage,USE_STATISTICS))
       {
 	log_printf(INFO,Execution_unit_to_Write_unit,FUNCTION,"Generate Statistics file");
