Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/Operation/include/Operation.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/Operation/include/Operation.h	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/Operation/include/Operation.h	(revision 101)
@@ -28,8 +28,8 @@
   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_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);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/Operation/src/Operation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/Operation/src/Operation.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/Operation/src/Operation.cpp	(revision 101)
@@ -90,5 +90,7 @@
 
     bool            overflow  = ovf  (param->_size_data,gpr1,gpr2,gpr3);
-    bool            carry_out = carry(param->_size_data,gpr1,gpr2,gpr3);
+//  bool            carry_out = carry(param->_size_data,gpr1,gpr2,gpr3);
+    // In ISA : l.sub don't change flag carry
+    bool            carry_out  = get_flag(op->_data_rc,FLAG_CY);
 
     // Result
@@ -104,4 +106,126 @@
 
 #undef  FUNCTION
+#define FUNCTION "Functionnal_unit::operation_l_mul"
+  void operation_l_mul         (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_mul");
+
+    Tgeneral_data_t gpr1      = unsigned(param->_size_data,op->_data_ra);
+    Tgeneral_data_t gpr2      = unsigned(param->_size_data,(op->_has_immediat==1)?op->_immediat:op->_data_rb);
+    Tgeneral_data_t gpr3      ;
+    bool            overflow  ;
+    bool            carry_out ;
+
+    if (param->_size_data == 32)
+      {
+        int64_t res = static_cast<int64_t>(gpr1) * static_cast<int64_t>(gpr2);
+
+        log_printf(TRACE,Functionnal_unit,FUNCTION,"  * res   : %llx",res);
+
+        gpr3      = param->_mask_data & static_cast<Tgeneral_data_t>(res);
+        carry_out = res != gpr3; 
+        overflow  = carry_out;
+      }
+    else
+      {
+        throw ERRORMORPHEO(FUNCTION,_("64 bits multiplcation : not yet implemented\n"));
+      }
+
+    // Result
+    op->_timing       = param->_timing[op->_type][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_mulu"
+  void operation_l_mulu        (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_mulu");
+
+    Tgeneral_data_t gpr1      = unsigned(param->_size_data,op->_data_ra);
+    Tgeneral_data_t gpr2      = unsigned(param->_size_data,op->_data_rb);
+    Tgeneral_data_t gpr3      ;
+    bool            overflow  ;
+    bool            carry_out ;
+
+    if (param->_size_data == 32)
+      {
+        uint64_t res = static_cast<uint64_t>(gpr1) * static_cast<uint64_t>(gpr2);
+
+        log_printf(TRACE,Functionnal_unit,FUNCTION,"  * res   : %llx",res);
+
+        gpr3      = param->_mask_data & static_cast<Tgeneral_data_t>(res);
+        carry_out = res != gpr3; 
+        overflow  = carry_out;
+      }
+    else
+      {
+        throw ERRORMORPHEO(FUNCTION,_("64 bits multiplcation : not yet implemented\n"));
+      }
+
+    // Result
+    op->_timing       = param->_timing[op->_type][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_div"
+  void operation_l_div         (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_div");
+
+    Tgeneral_data_t gpr1      = signed(param->_size_data,op->_data_ra);
+    Tgeneral_data_t gpr2      = signed(param->_size_data,op->_data_rb);
+    Tgeneral_data_t gpr3      = (gpr2!=0)?(gpr1/gpr2):0;
+    bool            overflow  = ovf  (param->_size_data,gpr1,gpr2,gpr3);
+    bool            carry_out = (gpr2==0);
+
+    // Result
+    op->_timing       = param->_timing[op->_type][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_divu"
+  void operation_l_divu        (execute_operation_t * op, execute_register_t * reg, execute_param_t * param)
+  {
+    log_printf(TRACE,Functionnal_unit,FUNCTION,"Operation : l_divu");
+
+    Tgeneral_data_t gpr1      = unsigned(param->_size_data,op->_data_ra);
+    Tgeneral_data_t gpr2      = unsigned(param->_size_data,op->_data_rb);
+    Tgeneral_data_t gpr3      = (gpr2!=0)?(gpr1/gpr2):0;
+    bool            overflow  = ovf  (param->_size_data,gpr1,gpr2,gpr3);
+    bool            carry_out = (gpr2==0);
+
+    // Result
+    op->_timing       = param->_timing[op->_type][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)
@@ -465,4 +589,5 @@
     Tgeneral_data_t gpr2       = unsigned(param->_size_data,(op->_has_immediat==1)?op->_immediat:op->_data_rb);
 
+    // Tgeneral_data_t is unsigned
     bool            f_out      = (gpr1 >= gpr2);
 
@@ -485,4 +610,5 @@
     Tgeneral_data_t gpr2       = unsigned(param->_size_data,(op->_has_immediat==1)?op->_immediat:op->_data_rb);
 
+    // Tgeneral_data_t is unsigned
     bool            f_out      = (gpr1 >  gpr2);
 
@@ -505,4 +631,5 @@
     Tgeneral_data_t gpr2       = unsigned(param->_size_data,(op->_has_immediat==1)?op->_immediat:op->_data_rb);
 
+    // Tgeneral_data_t is unsigned
     bool            f_out      = (gpr1 <= gpr2);
 
@@ -525,4 +652,5 @@
     Tgeneral_data_t gpr2       = unsigned(param->_size_data,(op->_has_immediat==1)?op->_immediat:op->_data_rb);
 
+    // Tgeneral_data_t is unsigned
     bool            f_out      = (gpr1 <  gpr2);
 
@@ -544,20 +672,18 @@
     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(param->_size_data,op->_data_ra));
-    log_printf(TRACE,Functionnal_unit,FUNCTION," * data_ras : %.8x",  signed(param->_size_data,op->_data_ra));
-    log_printf(TRACE,Functionnal_unit,FUNCTION," * data_rb  : %.8x",unsigned(param->_size_data,(op->_has_immediat==1)?op->_immediat:op->_data_rb));
-    log_printf(TRACE,Functionnal_unit,FUNCTION," * data_rbs : %.8x",  signed(param->_size_data,(op->_has_immediat==1)?op->_immediat:op->_data_rb));
-    
+        
     bool            f_out;
 
-    switch (concatenation_bool(sign(param->_size_data,gpr1),sign(param->_size_data,gpr2)))
-      {
-      case 1 /*b01*/ : f_out = 1                               ; break;
-      case 2 /*b10*/ : f_out = 0                               ; break;
-      default        : f_out = signed(param->_size_data,gpr1) >= signed(param->_size_data,gpr2); break;
-      }
-
-    log_printf(TRACE,Functionnal_unit,FUNCTION," * f_out    : %.8x",f_out);
+    if (param->_size_data == 32)
+      f_out = static_cast<int32_t>(gpr1) >= static_cast<int32_t>(gpr2);
+    else
+      f_out = static_cast<int64_t>(gpr1) >= static_cast<int64_t>(gpr2);
+
+//     switch (concatenation_bool(sign(param->_size_data,gpr1),sign(param->_size_data,gpr2)))
+//       {
+//       case 1 /*b01*/ : f_out = 1                               ; break;
+//       case 2 /*b10*/ : f_out = 0                               ; break;
+//       default        : f_out = signed(param->_size_data,gpr1) >= signed(param->_size_data,gpr2); break;
+//       }
 
     // Result
@@ -581,10 +707,15 @@
     bool            f_out;
 
-    switch (concatenation_bool(sign(param->_size_data,gpr1),sign(param->_size_data,gpr2)))
-      {
-      case 1 /*b01*/ : f_out = 1; break;
-      case 2 /*b10*/ : f_out = 0; break;
-      default        : f_out = signed(param->_size_data,gpr1) >  signed(param->_size_data,gpr2); break;
-      }
+    if (param->_size_data == 32)
+      f_out = static_cast<int32_t>(gpr1) >  static_cast<int32_t>(gpr2);
+    else
+      f_out = static_cast<int64_t>(gpr1) >  static_cast<int64_t>(gpr2);
+
+//     switch (concatenation_bool(sign(param->_size_data,gpr1),sign(param->_size_data,gpr2)))
+//       {
+//       case 1 /*b01*/ : f_out = 1; break;
+//       case 2 /*b10*/ : f_out = 0; break;
+//       default        : f_out = signed(param->_size_data,gpr1) >  signed(param->_size_data,gpr2); break;
+//       }
 
     // Result
@@ -608,10 +739,15 @@
     bool            f_out;
 
-    switch (concatenation_bool(sign(param->_size_data,gpr1),sign(param->_size_data,gpr2)))
-      {
-      case 1 /*b01*/ : f_out = 0; break;
-      case 2 /*b10*/ : f_out = 1; break;
-      default        : f_out = signed(param->_size_data,gpr1) <= signed(param->_size_data,gpr2); break;
-      }
+    if (param->_size_data == 32)
+      f_out = static_cast<int32_t>(gpr1) <= static_cast<int32_t>(gpr2);
+    else
+      f_out = static_cast<int64_t>(gpr1) <= static_cast<int64_t>(gpr2);
+
+//     switch (concatenation_bool(sign(param->_size_data,gpr1),sign(param->_size_data,gpr2)))
+//       {
+//       case 1 /*b01*/ : f_out = 0; break;
+//       case 2 /*b10*/ : f_out = 1; break;
+//       default        : f_out = signed(param->_size_data,gpr1) <= signed(param->_size_data,gpr2); break;
+//       }
     
     // Result
@@ -635,10 +771,15 @@
     bool            f_out;
 
-    switch (concatenation_bool(sign(param->_size_data,gpr1),sign(param->_size_data,gpr2)))
-      {
-      case 1 /*b01*/ : f_out = 0; break;
-      case 2 /*b10*/ : f_out = 1; break;
-      default        : f_out = signed(param->_size_data,gpr1) <  signed(param->_size_data,gpr2); break;
-      }
+    if (param->_size_data == 32)
+      f_out = static_cast<int32_t>(gpr1) <  static_cast<int32_t>(gpr2);
+    else
+      f_out = static_cast<int64_t>(gpr1) <  static_cast<int64_t>(gpr2);
+
+//     switch (concatenation_bool(sign(param->_size_data,gpr1),sign(param->_size_data,gpr2)))
+//       {
+//       case 1 /*b01*/ : f_out = 0; break;
+//       case 2 /*b10*/ : f_out = 1; break;
+//       default        : f_out = signed(param->_size_data,gpr1) <  signed(param->_size_data,gpr2); break;
+//       }
 
     // Result
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 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/src/test.cpp	(revision 101)
@@ -18,5 +18,5 @@
 public : const Tcontext_t         _front_end_id ;
 public : const Tcontext_t         _ooo_engine_id;
-public : const Tpacket_t          _packet_id    ;
+public : const uint32_t           _packet_id    ;
 public : const Toperation_t       _operation    ;
 public : const Ttype_t            _type         ;
@@ -40,5 +40,5 @@
 			      Tcontext_t         front_end_id ,
 			      Tcontext_t         ooo_engine_id,
-			      Tpacket_t          packet_id    ,
+			      uint32_t           packet_id    ,
 			      Toperation_t       operation    ,
 			      Ttype_t            type         ,
@@ -356,11 +356,11 @@
   transaction_in.push_back(execute_transaction(_param,0,0,0, 99,OPERATION_FIND_L_FL1     ,TYPE_FIND,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,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,0xe0000000,1,3 ,        FLAG_OV,EXCEPTION_ALU_RANGE,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_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 ,0x80000002,1,0 ,FLAG_CY        ,EXCEPTION_NONE     ,0));
 
   transaction_in.push_back(execute_transaction(_param,0,0,0,120,OPERATION_TEST_L_SFEQ    ,TYPE_TEST,0,0         ,0xdead    ,0xdead    ,0              ,0,63,0x0       ,1,15,FLAG_F         ,EXCEPTION_NONE     ,0)); // + == +
@@ -440,5 +440,5 @@
   transaction_in.push_back(execute_transaction(_param,0,0,0,232,OPERATION_TEST_L_SFGES   ,TYPE_TEST,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_TEST_L_SFGES   ,TYPE_TEST,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_TEST_L_SFGES   ,TYPE_TEST,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,234,OPERATION_TEST_L_SFGES   ,TYPE_TEST,0,0         ,0xdeadbabe,0xdeadbeef,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - >  -
   transaction_in.push_back(execute_transaction(_param,0,0,0,235,OPERATION_TEST_L_SFGES   ,TYPE_TEST,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_TEST_L_SFGES   ,TYPE_TEST,0,0         ,0xdeadbeef,0x21524111,0              ,0,63,0x0       ,1,15,0              ,EXCEPTION_NONE     ,0)); // - == + (in unsigned)
@@ -569,4 +569,18 @@
   transaction_in.push_back(execute_transaction(_param,0,0,0,628,OPERATION_SPECIAL_L_MFSPR   ,TYPE_SPECIAL,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,700,OPERATION_MUL_L_MUL     ,TYPE_MUL,0,0         ,0x00000001,0x00000001,0              ,1,63,0x00000001,1,15,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,701,OPERATION_MUL_L_MUL     ,TYPE_MUL,0,0         ,0x00002107,0x00001981,0              ,1,63,0x034a5387,1,15,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,702,OPERATION_MUL_L_MUL     ,TYPE_MUL,0,0         ,0x00048698,0x0000dead,0              ,1,63,0xefc6c4b8,1,15,FLAG_CY|FLAG_OV,EXCEPTION_ALU_RANGE,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,702,OPERATION_MUL_L_MUL     ,TYPE_MUL,0,0         ,0x40000000,0x00000002,0              ,1,63,0x80000000,1,15,        FLAG_OV,EXCEPTION_ALU_RANGE,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,702,OPERATION_MUL_L_MUL     ,TYPE_MUL,0,0         ,0x40000000,0x00000004,0              ,1,63,0x00000000,1,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+
+  transaction_in.push_back(execute_transaction(_param,0,0,0,700,OPERATION_MUL_L_MULU    ,TYPE_MUL,0,0         ,0x00000001,0x00000001,0              ,1,63,0x00000001,1,15,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,701,OPERATION_MUL_L_MULU    ,TYPE_MUL,0,0         ,0x00002107,0x00001981,0              ,1,63,0x034a5387,1,15,0              ,EXCEPTION_NONE     ,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,702,OPERATION_MUL_L_MULU    ,TYPE_MUL,0,0         ,0x00048698,0x0000dead,0              ,1,63,0xefc6c4b8,1,15,FLAG_CY|FLAG_OV,EXCEPTION_ALU_RANGE,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,702,OPERATION_MUL_L_MULU    ,TYPE_MUL,0,0         ,0x40000000,0x00000002,0              ,1,63,0x80000000,1,15,        FLAG_OV,EXCEPTION_ALU_RANGE,0));
+  transaction_in.push_back(execute_transaction(_param,0,0,0,702,OPERATION_MUL_L_MULU    ,TYPE_MUL,0,0         ,0x40000000,0x00000004,0              ,1,63,0x00000000,1,15,FLAG_CY        ,EXCEPTION_NONE     ,0));
+
+
+
   LABEL("Reset");
   in_NRESET.write(0);
@@ -585,7 +599,7 @@
 
       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);
@@ -601,5 +615,5 @@
 	      in_EXECUTE_IN_OOO_ENGINE_ID .write(transaction_in.front()._ooo_engine_id);
 	      if (_param->_have_port_rob_ptr)
-	      in_EXECUTE_IN_PACKET_ID     .write(transaction_in.front()._packet_id    );
+              in_EXECUTE_IN_PACKET_ID     .write(static_cast<Tpacket_t>(transaction_in.front()._packet_id));
 	      in_EXECUTE_IN_OPERATION     .write(transaction_in.front()._operation    );
 	      in_EXECUTE_IN_TYPE          .write(transaction_in.front()._type         );
@@ -624,5 +638,5 @@
 	      // TEST
 	      if (_param->_have_port_rob_ptr)
-	      TEST(Tpacket_t         , out_EXECUTE_OUT_PACKET_ID    .read(), transaction_out.front()._packet_id    );
+              TEST(Tpacket_t         , out_EXECUTE_OUT_PACKET_ID    .read(), static_cast<Tpacket_t>(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   );
@@ -649,5 +663,4 @@
 		  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;
 		}
 
@@ -659,5 +672,4 @@
 		  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;
 		}
 	      
@@ -685,7 +697,8 @@
 
 	  SC_START(1);
-	}
+      }
 
     }
+
   /********************************************************
    * Simulation - End
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 100)
+++ 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 101)
@@ -174,6 +174,6 @@
      if (_param->_timing[TYPE_ALU    ][OPERATION_ALU_L_ADDC        ]._latence > 0) 
        _function_execute[TYPE_ALU    ][OPERATION_ALU_L_ADDC        ] = &(operation_l_addc    );
-//   if (_param->_timing[TYPE_ALU    ][OPERATION_ALU_L_SUB         ]._latence > 0) 
-//     _function_execute[TYPE_ALU    ][OPERATION_ALU_L_SUB         ] = &(operation_l_sub     );
+     if (_param->_timing[TYPE_ALU    ][OPERATION_ALU_L_SUB         ]._latence > 0) 
+       _function_execute[TYPE_ALU    ][OPERATION_ALU_L_SUB         ] = &(operation_l_sub     );
      if (_param->_timing[TYPE_ALU    ][OPERATION_ALU_L_AND         ]._latence > 0) 
        _function_execute[TYPE_ALU    ][OPERATION_ALU_L_AND         ] = &(operation_l_and     );
@@ -214,12 +214,12 @@
      if (_param->_timing[TYPE_TEST   ][OPERATION_TEST_L_SFNE       ]._latence > 0) 
        _function_execute[TYPE_TEST   ][OPERATION_TEST_L_SFNE       ] = &(operation_l_sfne    );
-//   if (_param->_timing[TYPE_MUL    ][OPERATION_MUL_L_MUL         ]._latence > 0) 
-//     _function_execute[TYPE_MUL    ][OPERATION_MUL_L_MUL         ] = &(operation_l_mul     );
-//   if (_param->_timing[TYPE_MUL    ][OPERATION_MUL_L_MULU        ]._latence > 0) 
-//     _function_execute[TYPE_DIV    ][OPERATION_MUL_L_MULU        ] = &(operation_l_mulu    );
-//   if (_param->_timing[TYPE_DIV    ][OPERATION_DIV_L_DIV         ]._latence > 0) 
-//     _function_execute[TYPE_DIV    ][OPERATION_DIV_L_DIV         ] = &(operation_l_div     );
-//   if (_param->_timing[TYPE_DIV    ][OPERATION_DIV_L_DIVU        ]._latence > 0) 
-//     _function_execute[TYPE_DIV    ][OPERATION_DIV_L_DIVU        ] = &(operation_l_divu    );
+     if (_param->_timing[TYPE_MUL    ][OPERATION_MUL_L_MUL         ]._latence > 0) 
+       _function_execute[TYPE_MUL    ][OPERATION_MUL_L_MUL         ] = &(operation_l_mul     );
+     if (_param->_timing[TYPE_MUL    ][OPERATION_MUL_L_MULU        ]._latence > 0) 
+       _function_execute[TYPE_MUL    ][OPERATION_MUL_L_MULU        ] = &(operation_l_mulu    );
+     if (_param->_timing[TYPE_DIV    ][OPERATION_DIV_L_DIV         ]._latence > 0) 
+       _function_execute[TYPE_DIV    ][OPERATION_DIV_L_DIV         ] = &(operation_l_div     );
+     if (_param->_timing[TYPE_DIV    ][OPERATION_DIV_L_DIVU        ]._latence > 0) 
+       _function_execute[TYPE_DIV    ][OPERATION_DIV_L_DIVU        ] = &(operation_l_divu    );
      if (_param->_timing[TYPE_EXTEND ][OPERATION_EXTEND_L_EXTEND_S ]._latence > 0) 
        _function_execute[TYPE_EXTEND ][OPERATION_EXTEND_L_EXTEND_S ] = &(operation_l_extend_s);
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 100)
+++ 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 101)
@@ -133,6 +133,6 @@
     // Address's Read must be aligned
 
-    if ((address & _mask_addr) != 0)
-      TEST_KO("<Memory_t::read> Address is not aligned");
+//     if ((address & _mask_addr) != 0)
+//       TEST_KO("<Memory_t::read> Address is not aligned");
 
     if (context>_nb_context)
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_genMealy_dcache.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_genMealy_dcache.cpp	(revision 100)
+++ 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_genMealy_dcache.cpp	(revision 101)
@@ -24,6 +24,6 @@
   void Load_store_unit::function_speculative_load_commit_genMealy_dcache (void)
   {
-    log_printf(FUNC,Load_store_unit,FUNCTION,"Begin");
-    log_printf(FUNC,Load_store_unit,FUNCTION,"End");
+    log_begin(Load_store_unit,FUNCTION);
+    log_end  (Load_store_unit,FUNCTION);
   };
 
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_genMealy_insert.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_genMealy_insert.cpp	(revision 100)
+++ 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_genMealy_insert.cpp	(revision 101)
@@ -24,5 +24,6 @@
   void Load_store_unit::function_speculative_load_commit_genMealy_insert (void)
   {
-    log_printf(FUNC,Load_store_unit,FUNCTION,"Begin");
+    log_begin(Load_store_unit,FUNCTION);
+    log_function(Load_store_unit,FUNCTION,_name.c_str());
 
     // ~~~~~[ Output "memory_in" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -52,5 +53,5 @@
       PORT_WRITE(out_MEMORY_IN_ACK [i], ack [i]);
 
-    log_printf(FUNC,Load_store_unit,FUNCTION,"End");
+    log_end(Load_store_unit,FUNCTION);
   };
 
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_genMealy_retire.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_genMealy_retire.cpp	(revision 100)
+++ 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_genMealy_retire.cpp	(revision 101)
@@ -24,6 +24,6 @@
   void Load_store_unit::function_speculative_load_commit_genMealy_retire (void)
   {
-    log_printf(FUNC,Load_store_unit,FUNCTION,"Begin");
-    log_printf(FUNC,Load_store_unit,FUNCTION,"End");
+    log_begin(Load_store_unit,FUNCTION);
+    log_end  (Load_store_unit,FUNCTION);
   };
 
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_genMoore.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_genMoore.cpp	(revision 100)
+++ 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_genMoore.cpp	(revision 101)
@@ -24,5 +24,6 @@
   void Load_store_unit::function_speculative_load_commit_genMoore (void)
   {
-    log_printf(FUNC,Load_store_unit,FUNCTION,"Begin");
+    log_begin(Load_store_unit,FUNCTION);
+    log_function(Load_store_unit,FUNCTION,_name.c_str());
 
     // ~~~~~[ Interface "memory_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -44,7 +45,7 @@
     // Test store and load queue
 
-    log_printf(TRACE,Load_store_unit,FUNCTION,"genMoore : Test MEMORY_OUT");
-
-    log_printf(TRACE,Load_store_unit,FUNCTION,"  * Load  queue");
+    log_printf(TRACE,Load_store_unit,FUNCTION,"  * Test MEMORY_OUT");
+
+    log_printf(TRACE,Load_store_unit,FUNCTION,"    * Load  queue");
     for (internal_MEMORY_OUT_PTR=0; internal_MEMORY_OUT_PTR<_param->_size_load_queue; internal_MEMORY_OUT_PTR++)
 //     for (uin32_t i=0; (i<_param->_size_load_queue) and not (find_load); i++)
@@ -71,5 +72,6 @@
 							     _load_queue [internal_MEMORY_OUT_PTR]._is_load_signed,
 							     _load_queue [internal_MEMORY_OUT_PTR]._access_size);
-	    log_printf(TRACE,Load_store_unit,FUNCTION,"    * data : %.8x",data_new);
+	    log_printf(TRACE,Load_store_unit,FUNCTION,"    * data (old) : %.8x",data_old);
+	    log_printf(TRACE,Load_store_unit,FUNCTION,"    * data (new) : %.8x",data_new);
 	    log_printf(TRACE,Load_store_unit,FUNCTION,"      * rdata        : %.8x",_load_queue [internal_MEMORY_OUT_PTR]._rdata);
 	    log_printf(TRACE,Load_store_unit,FUNCTION,"      * shift        : %d",_load_queue [internal_MEMORY_OUT_PTR]._shift);
@@ -91,5 +93,5 @@
     if (not internal_MEMORY_OUT_VAL)
       {
-	log_printf(TRACE,Load_store_unit,FUNCTION,"  * Store queue");
+	log_printf(TRACE,Load_store_unit,FUNCTION,"    * Store queue");
 	if (_store_queue [reg_STORE_QUEUE_PTR_READ]._state == STORE_QUEUE_COMMIT)
 	  {
@@ -143,5 +145,5 @@
     Tdcache_data_t    dcache_req_wdata     ;
 
-    log_printf(TRACE,Load_store_unit,FUNCTION,"genMoore : Test DCACHE_REQ");
+    log_printf(TRACE,Load_store_unit,FUNCTION,"  * Test DCACHE_REQ");
 
     internal_DCACHE_REQ_VAL = 0;
@@ -152,5 +154,5 @@
     if (_speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._state == SPECULATIVE_ACCESS_QUEUE_WAIT_CACHE)
       {
-	log_printf(TRACE,Load_store_unit,FUNCTION," * speculative_access_queue[%d]",internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ);
+	log_printf(TRACE,Load_store_unit,FUNCTION,"    * speculative_access_queue [%d]",internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ);
 
 	internal_DCACHE_REQ_VAL          = 1;
@@ -169,6 +171,11 @@
 
 	dcache_req_packet_id  = DCACHE_REQ_IS_LOAD(_speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._load_queue_ptr_write);
-	dcache_req_address    = _speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._address & _param->_mask_address_msb;
+	dcache_req_address    = _speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._address;// & _param->_mask_address_msb;
 	dcache_req_type       = operation_to_dcache_type(_speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._operation);
+
+// 	log_printf(TRACE,Load_store_unit,FUNCTION,"      * address            : %.8x",_speculative_access_queue [internal_SPECULATIVE_ACCESS_QUEUE_PTR_READ]._address);
+//      log_printf(TRACE,Load_store_unit,FUNCTION,"      * mask               : %.8x",_param->_mask_address_msb);
+        log_printf(TRACE,Load_store_unit,FUNCTION,"      * dcache_req_address : %.8x",dcache_req_address);
+
 #ifdef SYSTEMC_VHDL_COMPATIBILITY
 	dcache_req_wdata      = 0;
@@ -210,5 +217,5 @@
     PORT_WRITE(out_DCACHE_REQ_WDATA     [0], dcache_req_wdata     );
     
-    log_printf(FUNC,Load_store_unit,FUNCTION,"End");
+    log_end(Load_store_unit,FUNCTION);
   };
 
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 100)
+++ 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 101)
@@ -260,4 +260,6 @@
             (    internal_MEMORY_IN_ACK  == 1))
           {
+            log_printf(TRACE,Load_store_unit,FUNCTION,"  * MEMORY_IN [%d]",internal_MEMORY_IN_PORT);
+
 	    // Test operation :
 	    //~~~~~~~~~~~~~~~~~
@@ -440,5 +442,5 @@
             (PORT_READ(in_MEMORY_OUT_ACK[0]) == 1))
           {
-	    log_printf(TRACE,Load_store_unit,FUNCTION,"  * MEMORY_OUT transaction");
+	    log_printf(TRACE,Load_store_unit,FUNCTION,"  * MEMORY_OUT[0] transaction");
 
 	    switch (internal_MEMORY_OUT_SELECT_QUEUE)
@@ -498,5 +500,5 @@
             (PORT_READ(in_DCACHE_REQ_ACK[0]) == 1))
           {
-	    log_printf(TRACE,Load_store_unit,FUNCTION,"  * DCACHE_REQ");
+	    log_printf(TRACE,Load_store_unit,FUNCTION,"  * DCACHE_REQ[0]");
 
 	    switch (internal_DCACHE_REQ_SELECT_QUEUE)
@@ -602,5 +604,5 @@
             (    internal_DCACHE_RSP_ACK == 1))
           {
-	    log_printf(TRACE,Load_store_unit,FUNCTION,"  * DCACHE_RSP");
+	    log_printf(TRACE,Load_store_unit,FUNCTION,"  * DCACHE_RSP [0]");
 
 	    // don't use context_id : because there are one queue for all thread
@@ -610,5 +612,7 @@
 	    Tdcache_error_t error      = PORT_READ(in_DCACHE_RSP_ERROR     [0]);
 
-	    log_printf(TRACE,Load_store_unit,FUNCTION,"    * original packet_id : %d", packet_id);
+	    log_printf(TRACE,Load_store_unit,FUNCTION,"    * original packet_id : %d"  , packet_id);
+	    log_printf(TRACE,Load_store_unit,FUNCTION,"    * rdata              : %.8x", rdata);
+	    log_printf(TRACE,Load_store_unit,FUNCTION,"    * error              : %d"  , error);
 	    
 	    if (DCACHE_RSP_IS_LOAD(packet_id) == 1)
@@ -623,5 +627,6 @@
 		  throw ErrorMorpheo(_("Receive of respons, but the corresponding operation don't wait a respons."));
 #endif
-		
+
+                _load_queue [packet_id]._rdata = rdata;
 		
 		if (error != DCACHE_ERROR_NONE)
@@ -639,6 +644,5 @@
 		    // FIXME : convention : if bus error, the cache return the fautive address !
 		    // But, the load's address is aligned !
-		    _load_queue [packet_id]._rdata = rdata;
-		
+
 		    switch (_load_queue [packet_id]._state)
 		      {
@@ -695,5 +699,5 @@
 	    uint32_t j = (*_speculative_access_queue_control)[i];
 
-            log_printf(TRACE,Load_store_unit,FUNCTION,"    [%.4d] %.4d %.4d %.4d, %.4d, %.4d, %.4d %.4d, %.8x, %.1d %.6d, %.2d, %s",
+            log_printf(TRACE,Load_store_unit,FUNCTION,"    [%.4d] %.4d %.4d %.4d, %.4d, %.4d, %.4d %.4d, %.8x, %.1d %.4d, %.2d, %s",
                        j,
                        _speculative_access_queue[j]._context_id          ,
@@ -719,5 +723,5 @@
 	    uint32_t j = i;
 
-            log_printf(TRACE,Load_store_unit,FUNCTION,"    [%.4d] %.4d %.4d %.4d, %.4d, %.4d, %.4d, %.8x %.1x %.1d %.2d %.1d %.2d, %.8x, %.1d %.6d, %.2d, %s",
+            log_printf(TRACE,Load_store_unit,FUNCTION,"    [%.4d] %.4d %.4d %.4d, %.4d, %.4d, %.4d, %.8x %.1x %.1d %.2d %.1d %.2d, %.8x, %.1d %.4d, %.2d, %s",
                        j,
                        _load_queue[j]._context_id          ,
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_vhdl.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_vhdl.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_vhdl.cpp	(revision 101)
@@ -33,5 +33,7 @@
       (_param->_size_queue,
        _param->_size_internal_queue,
-       0
+       0,
+       false,
+       false
        );
     
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/include/Execute_queue.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/include/Execute_queue.h	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/include/Execute_queue.h	(revision 101)
@@ -14,5 +14,5 @@
 
 #include <iostream>
-#include <queue>
+#include <list>
 #include "Common/include/ToString.h"
 #include "Common/include/Debug.h"
@@ -99,5 +99,5 @@
     
     // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
-  private   : std::queue<execute_queue_entry_t *> * _queue;
+  private   : std::list<execute_queue_entry_t *> * _queue;
     // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   private   : Tcontrol_t                       internal_EXECUTE_QUEUE_IN_ACK ;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/src/Execute_queue_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/src/Execute_queue_allocation.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/src/Execute_queue_allocation.cpp	(revision 101)
@@ -96,5 +96,5 @@
     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
 
-     _queue = new std::queue<execute_queue_entry_t *>;
+     _queue = new std::list<execute_queue_entry_t *>;
 
 #ifdef POSITION
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/src/Execute_queue_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/src/Execute_queue_deallocation.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/src/Execute_queue_deallocation.cpp	(revision 101)
@@ -72,5 +72,5 @@
       {
 	delete _queue->front();
-	_queue->pop();
+	_queue->pop_front();
       }
     delete _queue;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/src/Execute_queue_genMoore.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/src/Execute_queue_genMoore.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/src/Execute_queue_genMoore.cpp	(revision 101)
@@ -23,5 +23,6 @@
   void Execute_queue::genMoore (void)
   {
-    log_printf(FUNC,Execute_queue,FUNCTION,"Begin");
+    log_begin(Execute_queue,FUNCTION);
+    log_function(Execute_queue,FUNCTION,_name.c_str());
 
     // -----[ Interface "execute_queue_in" ]--------------------------------
@@ -59,5 +60,5 @@
     }
 
-    log_printf(FUNC,Execute_queue,FUNCTION,"End");
+    log_end(Execute_queue,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/src/Execute_queue_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/src/Execute_queue_transition.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/src/Execute_queue_transition.cpp	(revision 101)
@@ -23,5 +23,6 @@
   void Execute_queue::transition (void)
   {
-    log_printf(FUNC,Execute_queue,FUNCTION,"Begin");
+    log_begin(Execute_queue,FUNCTION);
+    log_function(Execute_queue,FUNCTION,_name.c_str());
 
     if (PORT_READ(in_NRESET) == 0)
@@ -32,6 +33,5 @@
 	// > 2) flush all slot in one cycle
 
-	while (_queue->empty() == false)
-	  _queue->pop();
+        _queue->clear();
       }
     else
@@ -53,5 +53,5 @@
 	       PORT_READ(in_EXECUTE_QUEUE_IN_DATA         ));
 	    
-	    _queue->push(entry);
+	    _queue->push_back(entry);
 	  }
 
@@ -60,5 +60,5 @@
 	  {
 	    delete _queue->front();
-	    _queue->pop();
+	    _queue->pop_front();
 	  }
       }
@@ -69,4 +69,31 @@
 #endif
     
+#if DEBUG_Execute_queue and (DEBUG >= DEBUG_TRACE)
+    log_printf(TRACE,Execute_queue,FUNCTION,"  * Dump Execute_queue");
+    {
+      uint32_t i=0;
+      for (std::list<execute_queue_entry_t *>::iterator it=_queue->begin();
+           it!=_queue->end();
+           ++it)
+        {
+          log_printf(TRACE,Execute_queue,FUNCTION,"  [%d] %.2d %.2d %.2d, %.4d, %.1d, %.2d %.1d, %.8x %.8x",
+                     i,
+                     (*it)->_context_id   ,
+                     (*it)->_front_end_id ,
+                     (*it)->_ooo_engine_id,
+                     (*it)->_packet_id    ,
+                   //(*it)->_operation    ,
+                   //(*it)->_type         ,
+                     (*it)->_flags        ,
+                     (*it)->_exception    ,
+                     (*it)->_no_sequence  ,
+                     (*it)->_address      ,
+                     (*it)->_data
+                     );
+          i++;
+        }
+    }
+#endif
+
 
 #if defined(STATISTICS) or defined(VHDL_TESTBENCH)
@@ -74,5 +101,5 @@
 #endif
 
-    log_printf(FUNC,Execute_queue,FUNCTION,"End");
+    log_end(Execute_queue,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/src/Execute_queue_vhdl.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/src/Execute_queue_vhdl.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/src/Execute_queue_vhdl.cpp	(revision 101)
@@ -35,5 +35,7 @@
       (_param->_size_queue,
        _param->_size_internal_queue,
-       0
+       0,
+       false,
+       false
        );
     
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/src/Write_queue_genMoore.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/src/Write_queue_genMoore.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/src/Write_queue_genMoore.cpp	(revision 101)
@@ -23,5 +23,6 @@
   void Write_queue::genMoore (void)
   {
-    log_printf(FUNC,Write_queue,FUNCTION,"Begin");
+    log_begin(Write_queue,FUNCTION);
+    log_function(Write_queue,FUNCTION,_name.c_str());
     
     // -----[ Interface "Write_queue_in" ]--------------------------------
@@ -109,5 +110,5 @@
 	}
     }
-    log_printf(FUNC,Write_queue,FUNCTION,"End");
+    log_end(Write_queue,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/src/Write_queue_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/src/Write_queue_transition.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/src/Write_queue_transition.cpp	(revision 101)
@@ -24,5 +24,6 @@
   void Write_queue::transition (void)
   {
-    log_printf(FUNC,Write_queue,FUNCTION,"Begin");
+    log_begin(Write_queue,FUNCTION);
+    log_function(Write_queue,FUNCTION,_name.c_str());
 
     if (PORT_READ(in_NRESET) == 0)
@@ -87,9 +88,40 @@
 #endif
 
+#if DEBUG_Write_queue and (DEBUG >= DEBUG_TRACE)
+    log_printf(TRACE,Write_queue,FUNCTION,"  * Dump Write_queue");
+    {
+      uint32_t i=0;
+      
+      for (std::list<write_queue_entry_t *>::iterator it=_queue->begin();
+           it!=_queue->end();
+           ++it)
+        {
+          log_printf(TRACE,Write_queue,FUNCTION,"  [%d] %.2d %.2d %.2d, %.4d, %.1d %.4d %.8x, %.1d %.4d %.1d, %.2d %.1d, %.8x",
+                     i,
+                     (*it)->_context_id   ,
+                     (*it)->_front_end_id ,
+                     (*it)->_ooo_engine_id,
+                     (*it)->_packet_id    ,
+                   //(*it)->_operation    ,
+                   //(*it)->_type         ,
+                     (*it)->_write_rd     ,
+                     (*it)->_num_reg_rd   ,
+                     (*it)->_data_rd      ,
+                     (*it)->_write_re     ,
+                     (*it)->_num_reg_re   ,
+                     (*it)->_data_re      ,
+                     (*it)->_exception    ,
+                     (*it)->_no_sequence  ,
+                     (*it)->_address      );
+          i++;
+        }
+    }
+#endif
+
 #if defined(STATISTICS) or defined(VHDL_TESTBENCH)
     end_cycle ();
 #endif
 
-    log_printf(FUNC,Write_queue,FUNCTION,"End");
+    log_end(Write_queue,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Parameters.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Parameters.cpp	(revision 101)
@@ -104,5 +104,6 @@
            0,
            nb_general_register[i],
-           1);
+           1,
+           "1");
         
         __param_spr        [i] = new morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters 
@@ -122,5 +123,6 @@
            0,
            nb_special_register[i],
-           1);	 
+           1,
+           "1");	 
         
         _param_gpr        [i] = new morpheo::behavioural::generic::registerfile::Parameters (__param_gpr        [i]);
