Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/include/Issue_queue.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/include/Issue_queue.h	(revision 110)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/include/Issue_queue.h	(revision 111)
@@ -139,16 +139,22 @@
     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
   private   : generic::priority::Priority   * _priority_in ;
+
+    // in_order implementation only
+    // out_of_order implementation only
+  private   : generic::priority::Priority   * _priority_reg;
   private   : generic::priority::Priority   * _priority_out;
-  private   : generic::priority::Priority   * _priority_reg;
 
     // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+    // common implementation
   private   : std::list<entry_t*>           * _issue_queue;
   private   : std::list<entry_t*>             _reexecute_queue;
+
+    // in_order implementation only
+  private   : uint32_t                        reg_NUM_BANK_HEAD;
+  private   : uint32_t                        reg_NUM_BANK_TAIL;
+    // out_of_order implementation only
   
     // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  private   : Tcontrol_t                    * internal_BANK_IN_ACK              ;//[nb_bank]
-  private   : uint32_t                      * internal_BANK_IN_NUM_RENAME_UNIT  ;//[nb_bank]
-  private   : uint32_t                      * internal_BANK_IN_NUM_INST         ;//[nb_bank]
-
+    // common implementation
   private   : Tcontrol_t                    * internal_ISSUE_OUT_VAL            ;//[nb_inst_issue]
   private   : Tcontrol_t                    * internal_ISSUE_OUT_FROM_REEXECUTE ;//[nb_inst_issue]
@@ -157,4 +163,17 @@
 
   private   : Tcontrol_t                    * internal_REEXECUTE_ACK            ;//[nb_inst_reexecute]
+
+    // in_order implementation only
+  private   : Tcontrol_t                    * internal_BANK_IN_ACK              ;//[nb_bank]
+  private   : uint32_t                      * internal_BANK_IN_NUM_RENAME_UNIT  ;//[nb_bank]
+  private   : uint32_t                      * internal_BANK_IN_NUM_INST         ;//[nb_bank]
+    // out_of_order implementation only
+  public    : Tcontrol_t                   ** internal_ISSUE_IN_ACK             ;//[nb_rename_unit][nb_inst_rename]
+
+    // function pointer
+  public    : void (morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Issue_queue::*function_transition) (void);
+  public    : void (morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Issue_queue::*function_genMoore  ) (void);
+  public    : void (morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Issue_queue::*function_genMealy_issue_in ) (void);
+  public    : void (morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Issue_queue::*function_genMealy_issue_out) (void);
 #endif
 
@@ -189,6 +208,15 @@
 					       
 #ifdef SYSTEMC				       
-  public  : void        transition                (void);
-  public  : void        genMoore                  (void);
+  public  : void        transition                          (void);
+  public  : void        genMoore                            (void);
+  public  : void        genMealy_issue_in                   (void);
+  public  : void        genMealy_issue_out                  (void);
+
+  public  : void        function_in_order_transition        (void);
+  public  : void        function_in_order_genMealy_issue_out(void);
+  public  : void        function_in_order_genMoore          (void);
+
+  public  : void        function_out_of_order_transition    (void);
+  public  : void        function_out_of_order_genMoore      (void);
 #endif					       
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/include/Parameters.h	(revision 110)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/include/Parameters.h	(revision 111)
@@ -25,60 +25,62 @@
   {
     //-----[ fields ]------------------------------------------------------------
-  public : uint32_t          _nb_context              ;
-  public : uint32_t          _nb_front_end            ;
-  public : uint32_t          _nb_rename_unit          ;
-  public : uint32_t          _size_queue              ;
-  public : uint32_t          _nb_bank                 ;
-//public : uint32_t          _size_packet             ;
-//public : uint32_t          _size_general_data       ;
-//public : uint32_t          _size_special_data       ;
-//public : uint32_t          _size_general_register   ;
-//public : uint32_t          _size_special_register   ;
-//public : uint32_t          _size_store_queue_ptr    ;
-//public : uint32_t          _size_load_queue_ptr     ;
-  public : uint32_t          _nb_inst_issue           ;
-  public : uint32_t        * _nb_inst_rename          ;//[nb_rename_unit]
-  public : uint32_t          _nb_inst_reexecute       ;
-  public : uint32_t          _nb_rename_unit_select   ;
-  public : Tpriority_t       _priority                ;
-  public : Tload_balancing_t _load_balancing          ;
-  public : bool           ** _table_routing           ;//[nb_rename_unit][nb_inst_issue]
-  public : bool           ** _table_issue_type        ;//[nb_inst_issue][nb_type]
-  public : uint32_t          _size_reexecute_queue    ;
-
-//public : uint32_t          _nb_bank_select_out      ;
-  public : uint32_t          _max_nb_inst_rename      ;
-
-//public : uint32_t          _size_context_id         ;
-//public : uint32_t          _size_front_end_id       ;
-  public : uint32_t          _size_bank               ;
-
-//public : bool              _have_port_context_id    ;
-//public : bool              _have_port_front_end_id  ;
-//public : bool              _have_port_packet_id     ;
-//public : bool              _have_port_load_queue_ptr;
+  public : uint32_t              _nb_context              ;
+  public : uint32_t              _nb_front_end            ;
+  public : uint32_t              _nb_rename_unit          ;
+  public : uint32_t              _size_queue              ;
+  public : Tissue_queue_scheme_t _queue_scheme            ;
+  public : uint32_t              _nb_bank                 ;
+//public : uint32_t              _size_packet             ;
+//public : uint32_t              _size_general_data       ;
+//public : uint32_t              _size_special_data       ;
+//public : uint32_t              _size_general_register   ;
+//public : uint32_t              _size_special_register   ;
+//public : uint32_t              _size_store_queue_ptr    ;
+//public : uint32_t              _size_load_queue_ptr     ;
+  public : uint32_t              _nb_inst_issue           ;
+  public : uint32_t            * _nb_inst_rename          ;//[nb_rename_unit]
+  public : uint32_t              _nb_inst_reexecute       ;
+  public : uint32_t              _nb_rename_unit_select   ;
+  public : Tpriority_t           _priority                ;
+  public : Tload_balancing_t     _load_balancing          ;
+  public : bool               ** _table_routing           ;//[nb_rename_unit][nb_inst_issue]
+  public : bool               ** _table_issue_type        ;//[nb_inst_issue][nb_type]
+  public : uint32_t              _size_reexecute_queue    ;
+                             
+//public : uint32_t              _nb_bank_select_out      ;
+  public : uint32_t              _max_nb_inst_rename      ;
+                             
+//public : uint32_t              _size_context_id         ;
+//public : uint32_t              _size_front_end_id       ;
+  public : uint32_t              _size_bank               ;
+                             
+//public : bool                  _have_port_context_id    ;
+//public : bool                  _have_port_front_end_id  ;
+//public : bool                  _have_port_packet_id     ;
+//public : bool                  _have_port_load_queue_ptr;
 
     //-----[ methods ]-----------------------------------------------------------
-  public : Parameters  (uint32_t          nb_context              ,
-			uint32_t          nb_front_end            ,
-			uint32_t          nb_rename_unit          ,
-			uint32_t          size_queue              ,
-			uint32_t          nb_bank                 ,
-			uint32_t          size_packet             ,
-			uint32_t          size_general_data       ,
-			uint32_t          size_special_data       ,
-			uint32_t          size_general_register   ,
-			uint32_t          size_special_register   ,
-			uint32_t          size_store_queue_ptr    ,
-			uint32_t          size_load_queue_ptr     ,
-			uint32_t          nb_inst_issue           ,
-			uint32_t        * nb_inst_rename          ,
-			uint32_t          nb_inst_reexecute       ,
-			uint32_t          nb_rename_unit_select   ,
-			Tpriority_t       priority                ,
-			Tload_balancing_t load_balancing          ,
-			bool           ** table_routing           ,
-			bool           ** table_issue_type        ,
-                        bool              is_toplevel=false);
+  public : Parameters  (uint32_t              nb_context              ,
+			uint32_t              nb_front_end            ,
+			uint32_t              nb_rename_unit          ,
+			uint32_t              size_queue              ,
+                        Tissue_queue_scheme_t queue_scheme            ,
+			uint32_t              nb_bank                 ,
+			uint32_t              size_packet             ,
+			uint32_t              size_general_data       ,
+			uint32_t              size_special_data       ,
+			uint32_t              size_general_register   ,
+			uint32_t              size_special_register   ,
+			uint32_t              size_store_queue_ptr    ,
+			uint32_t              size_load_queue_ptr     ,
+			uint32_t              nb_inst_issue           ,
+			uint32_t            * nb_inst_rename          ,
+			uint32_t              nb_inst_reexecute       ,
+			uint32_t              nb_rename_unit_select   ,
+			Tpriority_t           priority                ,
+			Tload_balancing_t     load_balancing          ,
+			bool               ** table_routing           ,
+			bool               ** table_issue_type        ,
+                        bool                  is_toplevel=false);
 
 //   public : Parameters  (Parameters & param) ;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/include/Types.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/include/Types.h	(revision 110)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/include/Types.h	(revision 111)
@@ -17,4 +17,11 @@
 namespace ooo_engine {
 namespace issue_queue {
+
+  typedef enum 
+    {
+       ISSUE_QUEUE_SCHEME_IN_ORDER        // Each instruction is issue in of order
+//       ,ISSUE_QUEUE_SCHEME_IN_BUNDLE_ORDER // Each bundle is issue in order. In bundle, an instruction is issue out of order
+      ,ISSUE_QUEUE_SCHEME_OUT_OF_ORDER    // Each instruction is issue out of order
+    } Tissue_queue_scheme_t;
 
   class entry_t
@@ -87,4 +94,32 @@
 }; // end namespace core
 }; // end namespace behavioural
+
+  template<> inline std::string toString<morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Tissue_queue_scheme_t>(const morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Tissue_queue_scheme_t& x)
+  {
+    switch (x)
+      {
+      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_ORDER        : return "in_order"       ; break;
+//       case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_BUNDLE_ORDER : return "in_bundle_order"; break;
+      case morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_OUT_OF_ORDER    : return "out_of_order"   ; break;
+      default : return ""; break;
+      }
+  };
+
+  template<> inline morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::Tissue_queue_scheme_t fromString<morpheo::behavioural::core::multi_ooo_engine
+::ooo_engine::issue_queue::Tissue_queue_scheme_t>(const std::string& x)
+  {
+    if ( (x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_ORDER))) == 0) or
+         (x.compare("in_order")        == 0))
+      return morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_ORDER;
+//     if ( (x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_BUNDLE_ORDER))) == 0) or
+//          (x.compare("in_bundle_order") == 0))
+//       return morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_BUNDLE_ORDER;
+    if ( (x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_OUT_OF_ORDER))) == 0) or
+         (x.compare("out_of_order")    == 0))
+      return morpheo::behavioural::core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_OUT_OF_ORDER;
+    
+    throw (ErrorMorpheo ("<fromString> : Unknow string : \""+x+"\""));
+  };
+
 }; // end namespace morpheo              
 
