Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue.cpp	(revision 87)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue.cpp	(revision 88)
@@ -39,4 +39,10 @@
 
     usage_environment(_usage);
+
+#if DEBUG_Decod_queue == true
+    log_printf(INFO,Decod_queue,FUNCTION,_("<%s> Parameters"),_name.c_str());
+
+    std::cout << *param << std::endl;
+#endif    
 
     log_printf(INFO,Decod_queue,FUNCTION,_("Allocation"));
@@ -98,8 +104,10 @@
 	for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
 	  sensitive << (*(in_DECOD_OUT_ACK [i]));
-	if (_param->_have_port_depth)
 	  for (uint32_t i=0; i<_param->_nb_context; i++)
-	    sensitive << (*(in_DEPTH_TAIL      [i]))
-		      << (*(in_DEPTH_NB_BRANCH [i]));
+            {
+              if (_param->_have_port_depth)
+              sensitive << (*(in_DEPTH_MIN [i]));
+              sensitive << (*(in_DEPTH_MAX [i]));
+            }
 
 # ifdef SYSTEMCASS_SPECIFIC
@@ -108,10 +116,10 @@
 	  {
 	    (*(out_DECOD_OUT_VAL [i])) (*(in_DECOD_OUT_ACK [i]));
-	    if (_param->_have_port_depth)
-	      for (uint32_t j=0; j<_param->_nb_context; j++)
-		{
-		  (*(out_DECOD_OUT_VAL [i])) (*(in_DEPTH_TAIL      [j]));
-		  (*(out_DECOD_OUT_VAL [i])) (*(in_DEPTH_NB_BRANCH [j]));
-		}
+            for (uint32_t j=0; j<_param->_nb_context; j++)
+              {
+                if (_param->_have_port_depth)
+                (*(out_DECOD_OUT_VAL [i])) (*(in_DEPTH_MIN [j]));
+                (*(out_DECOD_OUT_VAL [i])) (*(in_DEPTH_MAX [j]));
+              }
 	  }
 # endif    
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_allocation.cpp	(revision 87)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_allocation.cpp	(revision 88)
@@ -65,4 +65,5 @@
       ALLOC1_SIGNAL_IN ( in_DECOD_IN_TYPE           ,"type"         ,Ttype_t            ,_param->_size_type                  );
       ALLOC1_SIGNAL_IN ( in_DECOD_IN_OPERATION      ,"operation"    ,Toperation_t       ,_param->_size_operation             );
+      ALLOC1_SIGNAL_IN ( in_DECOD_IN_NO_EXECUTE     ,"no_execute"   ,Tcontrol_t         ,1                                   );
       ALLOC1_SIGNAL_IN ( in_DECOD_IN_IS_DELAY_SLOT  ,"is_delay_slot",Tcontrol_t         ,1                                   );
       ALLOC1_SIGNAL_IN ( in_DECOD_IN_ADDRESS        ,"address"      ,Tgeneral_data_t    ,_param->_size_general_data          );
@@ -80,4 +81,5 @@
       ALLOC1_SIGNAL_IN ( in_DECOD_IN_NUM_REG_RE     ,"num_reg_re"   ,Tspecial_address_t ,_param->_size_special_register_logic);
       ALLOC1_SIGNAL_IN ( in_DECOD_IN_EXCEPTION_USE  ,"exception_use",Texception_t       ,_param->_size_exception_use         );
+      ALLOC1_SIGNAL_IN ( in_DECOD_IN_EXCEPTION      ,"exception"    ,Texception_t       ,_param->_size_exception_decod       );
     }
 
@@ -92,4 +94,5 @@
       ALLOC1_SIGNAL_OUT(out_DECOD_OUT_TYPE           ,"type"         ,Ttype_t            ,_param->_size_type                  );
       ALLOC1_SIGNAL_OUT(out_DECOD_OUT_OPERATION      ,"operation"    ,Toperation_t       ,_param->_size_operation             );
+      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_NO_EXECUTE     ,"no_execute"   ,Tcontrol_t         ,1                                   );
       ALLOC1_SIGNAL_OUT(out_DECOD_OUT_IS_DELAY_SLOT  ,"is_delay_slot",Tcontrol_t         ,1                                   );
       ALLOC1_SIGNAL_OUT(out_DECOD_OUT_ADDRESS        ,"address"      ,Tgeneral_data_t    ,_param->_size_general_data          );
@@ -107,4 +110,5 @@
       ALLOC1_SIGNAL_OUT(out_DECOD_OUT_NUM_REG_RE     ,"num_reg_re"   ,Tspecial_address_t ,_param->_size_special_register_logic);
       ALLOC1_SIGNAL_OUT(out_DECOD_OUT_EXCEPTION_USE  ,"exception_use",Texception_t       ,_param->_size_exception_use         );
+      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_EXCEPTION      ,"exception"    ,Texception_t       ,_param->_size_exception_decod       );
     }
 
@@ -113,16 +117,17 @@
       ALLOC1_INTERFACE("depth",IN ,NORTH,"Depth", _param->_nb_context);
 
-      ALLOC1_SIGNAL_IN ( in_DEPTH_TAIL     ,"tail"     ,Tdepth_t           ,_param->_size_depth  );
-      if (_param->_have_port_depth)
-      ALLOC1_SIGNAL_IN ( in_DEPTH_NB_BRANCH,"nb_branch",Tdepth_t           ,_param->_size_depth+1);
+      ALLOC1_SIGNAL_IN ( in_DEPTH_MIN      ,"min"      ,Tdepth_t           ,_param->_size_depth  );
+      ALLOC1_SIGNAL_IN ( in_DEPTH_MAX      ,"max"      ,Tdepth_t           ,_param->_size_depth+1);
     }
 
-    // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~            
+    // ~~~~~[ Interface : "nb_inst" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~            
     {
       ALLOC1_INTERFACE("nb_inst",OUT,NORTH,"Instruction's number", _param->_nb_context);
 
-      ALLOC1_SIGNAL_OUT(out_NB_INST_ALL    ,"all"      ,Tcontext_t         ,_param->_size_nb_inst+1);
+      ALLOC1_SIGNAL_OUT(out_NB_INST_ALL    ,"all"      ,Tcontext_t         ,_param->_size_nb_inst_decod);
     }
 
+    if (usage_is_set(_usage,USE_SYSTEMC))
+      {
     // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
     reg_QUEUE              = new std::list<decod_queue_entry_t*>;
@@ -133,4 +138,5 @@
     internal_DECOD_OUT_VAL = new Tcontrol_t [_param->_nb_inst_decod];
     internal_DECOD_OUT_ACK = new Tcontrol_t [_param->_nb_inst_decod];
+      }
     
     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_deallocation.cpp	(revision 87)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_deallocation.cpp	(revision 88)
@@ -35,4 +35,5 @@
 	DELETE1_SIGNAL( in_DECOD_IN_TYPE           ,_param->_nb_inst_decod,_param->_size_type                  );
 	DELETE1_SIGNAL( in_DECOD_IN_OPERATION      ,_param->_nb_inst_decod,_param->_size_operation             );
+	DELETE1_SIGNAL( in_DECOD_IN_NO_EXECUTE     ,_param->_nb_inst_decod,1                                   );
 	DELETE1_SIGNAL( in_DECOD_IN_IS_DELAY_SLOT  ,_param->_nb_inst_decod,1                                   );
 	DELETE1_SIGNAL( in_DECOD_IN_ADDRESS        ,_param->_nb_inst_decod,_param->_size_general_data          );
@@ -50,4 +51,5 @@
 	DELETE1_SIGNAL( in_DECOD_IN_NUM_REG_RE     ,_param->_nb_inst_decod,_param->_size_special_register_logic);
 	DELETE1_SIGNAL( in_DECOD_IN_EXCEPTION_USE  ,_param->_nb_inst_decod,_param->_size_exception_use         );
+	DELETE1_SIGNAL( in_DECOD_IN_EXCEPTION      ,_param->_nb_inst_decod,_param->_size_exception             );
 	
 	DELETE1_SIGNAL(out_DECOD_OUT_VAL           ,_param->_nb_inst_decod,1);
@@ -57,4 +59,5 @@
 	DELETE1_SIGNAL(out_DECOD_OUT_TYPE          ,_param->_nb_inst_decod,_param->_size_type                  );
 	DELETE1_SIGNAL(out_DECOD_OUT_OPERATION     ,_param->_nb_inst_decod,_param->_size_operation             );
+	DELETE1_SIGNAL(out_DECOD_OUT_NO_EXECUTE    ,_param->_nb_inst_decod,1                                   );
 	DELETE1_SIGNAL(out_DECOD_OUT_IS_DELAY_SLOT ,_param->_nb_inst_decod,1                                   );
 	DELETE1_SIGNAL(out_DECOD_OUT_ADDRESS       ,_param->_nb_inst_decod,_param->_size_general_data          );
@@ -72,19 +75,20 @@
 	DELETE1_SIGNAL(out_DECOD_OUT_NUM_REG_RE    ,_param->_nb_inst_decod,_param->_size_special_register_logic);
 	DELETE1_SIGNAL(out_DECOD_OUT_EXCEPTION_USE ,_param->_nb_inst_decod,_param->_size_exception_use         );
+	DELETE1_SIGNAL(out_DECOD_OUT_EXCEPTION     ,_param->_nb_inst_decod,_param->_size_exception             );
 	
-	DELETE1_SIGNAL( in_DEPTH_TAIL     ,_param->_nb_context,_param->_size_depth  );
-	if (_param->_have_port_depth)
-	DELETE1_SIGNAL( in_DEPTH_NB_BRANCH,_param->_nb_context,_param->_size_depth+1);
+	DELETE1_SIGNAL( in_DEPTH_MIN               ,_param->_nb_context,_param->_size_depth  );
+	DELETE1_SIGNAL( in_DEPTH_MAX               ,_param->_nb_context,_param->_size_depth+1);
 
-	DELETE1_SIGNAL(out_NB_INST_ALL    ,_param->_nb_context,_param->_size_nb_inst+1);
+	DELETE1_SIGNAL(out_NB_INST_ALL             ,_param->_nb_context,_param->_size_nb_inst_decod);
+
+        // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+        delete    reg_QUEUE;
+        delete [] reg_NB_INST;
+        
+        // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+        delete [] internal_DECOD_IN_ACK ;
+        delete [] internal_DECOD_OUT_VAL;
+        delete [] internal_DECOD_OUT_ACK;
       }
-    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
-    delete    reg_QUEUE;
-    delete [] reg_NB_INST;
-    
-    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    delete [] internal_DECOD_IN_ACK ;
-    delete [] internal_DECOD_OUT_VAL;
-    delete [] internal_DECOD_OUT_ACK;
 
     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_genMealy_decod_out.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_genMealy_decod_out.cpp	(revision 87)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_genMealy_decod_out.cpp	(revision 88)
@@ -23,4 +23,5 @@
   {
     log_begin(Decod_queue,FUNCTION);
+    log_function(Decod_queue,FUNCTION,_name.c_str());
 
     Tcontrol_t val [_param->_nb_inst_decod];
@@ -36,17 +37,32 @@
 	if (reg_QUEUE->front()->_val [i])
 	  {
-	    log_printf(TRACE,Decod_queue,FUNCTION,_("Queue is not empty, slot [%d] is valid."),i);
+	    log_printf(TRACE,Decod_queue,FUNCTION,_("  * Queue is not empty, slot [%d] is valid."),i);
 
 	    Tcontext_t context         = reg_QUEUE->front()->_context_id    [i];
 	    Tdepth_t   depth           = reg_QUEUE->front()->_depth         [i];
-	    Tdepth_t   depth_base      = (_param->_have_port_depth)?PORT_READ(in_DEPTH_TAIL      [context]):0;
-	    Tdepth_t   depth_offset    = (_param->_have_port_depth)?PORT_READ(in_DEPTH_NB_BRANCH [context]):0;
-	    Tdepth_t   depth_max       = depth_base + depth_offset;
+	    Tdepth_t   depth_min       = (_param->_have_port_depth)?PORT_READ(in_DEPTH_MIN [context]):0;
+	    Tdepth_t   depth_max       = PORT_READ(in_DEPTH_MAX[context]);
 
 	    // is a valid instruction ?
-	    //  * depth must be lower that depth max
-	    Tcontrol_t is_valid        = depth <= ((depth>depth_base)?(depth_max):(depth_max%_param->_nb_branch_speculated [context]));
+            // If DEPTH_CURRENT :
+            // equal at     DEPTH_MIN            -> not speculative
+            // not include ]DEPTH_MIN:DEPTH_MAX[ -> previous branch miss
+            //     include ]DEPTH_MIN:DEPTH_MAX[ -> speculative
 
-	    log_printf(TRACE,Decod_queue,FUNCTION,_("  * is_valid : %d"),is_valid);
+            // All case
+            // ....... min ...X... max ....... OK
+            // ....... min ....... max ...X... KO
+            // ...X... min ....... max ....... KO
+            // ....... max ....... min ...X... OK
+            // ...X... max ....... min ....... OK
+            // ....... max ...X... min ....... KO
+
+   	    Tcontrol_t is_valid        = ((depth == depth_min) or 
+                                          ((depth_min < depth_max)?
+                                           (depth<depth_max):
+                                           ((depth > depth_min) or (depth < depth_max))));
+//          Tcontrol_t is_valid        = depth <= depth_max;
+
+	    log_printf(TRACE,Decod_queue,FUNCTION,_("    * is_valid : %d"),is_valid);
 
 	    internal_DECOD_OUT_VAL [i] = 1; // in all case, val is set (entry is not empty, and instruction is valid)
@@ -65,4 +81,6 @@
     for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
       {
+        log_printf(TRACE,Decod_queue,FUNCTION,_("  * DECOD_OUT_VAL : %d"),val [i]);
+
 	PORT_WRITE(out_DECOD_OUT_VAL [i],val [i]);
       }
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_genMoore.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_genMoore.cpp	(revision 87)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_genMoore.cpp	(revision 88)
@@ -23,4 +23,5 @@
   {
     log_begin(Decod_queue,FUNCTION);
+    log_function(Decod_queue,FUNCTION,_name.c_str());
 
     //--------------------------------------------------------------------
@@ -49,4 +50,5 @@
 	  PORT_WRITE(out_DECOD_OUT_TYPE          [i],reg_QUEUE->front()->_type          [i]);
 	  PORT_WRITE(out_DECOD_OUT_OPERATION     [i],reg_QUEUE->front()->_operation     [i]);
+	  PORT_WRITE(out_DECOD_OUT_NO_EXECUTE    [i],reg_QUEUE->front()->_no_execute    [i]);
 	  PORT_WRITE(out_DECOD_OUT_IS_DELAY_SLOT [i],reg_QUEUE->front()->_is_delay_slot [i]);
 	  PORT_WRITE(out_DECOD_OUT_ADDRESS       [i],reg_QUEUE->front()->_address       [i]);
@@ -64,4 +66,5 @@
 	  PORT_WRITE(out_DECOD_OUT_NUM_REG_RE    [i],reg_QUEUE->front()->_num_reg_re    [i]);
 	  PORT_WRITE(out_DECOD_OUT_EXCEPTION_USE [i],reg_QUEUE->front()->_exception_use [i]);
+	  PORT_WRITE(out_DECOD_OUT_EXCEPTION     [i],reg_QUEUE->front()->_exception     [i]);
 	}
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_statistics_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_statistics_allocation.cpp	(revision 87)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_statistics_allocation.cpp	(revision 88)
@@ -29,5 +29,6 @@
 		      param_statistics);
 
-    _stat_nb_inst = new counter_t * [_param->_nb_context];
+    _stat_use_queue = _stat->create_variable ("use_queue");
+    _stat_nb_inst   = new counter_t * [_param->_nb_context];
 
     std::string expr_average_inst = "";
@@ -35,17 +36,20 @@
     for (uint32_t i=0; i<_param->_nb_context; i++)
       {
-	_stat_nb_inst [i] = _stat->create_variable("nb_inst_"+toString(i));
-	
-	_stat->create_expr_average_by_cycle("average_inst_"+toString(i), "nb_inst_"+toString(i), "", toString(_("Average instruction by cycle (context %d)"),i));
-	_stat->create_expr_percent         ("percent_use_inst_"+toString(i) , "average_inst_"+toString(i), toString(_param->_size_queue), toString(_("Percent instruction by cycle (context %d)"),i));
-
-	if (i == 0)
-	  expr_average_inst = "nb_inst_"+toString(i);
+        _stat_nb_inst [i] = _stat->create_variable("nb_inst_"+toString(i));
+        
+        _stat->create_expr_average_by_cycle("average_inst_"+toString(i), "nb_inst_"+toString(i), "", toString(_("Average instruction number in decod_queue by cycle (context %d)"),i));
+        _stat->create_expr_percent         ("percent_use_inst_"+toString(i) , "average_inst_"+toString(i), toString(_param->_size_queue), toString(_("Percent decod_queue's occupation (context %d)"),i));
+        
+        if (i == 0)
+          expr_average_inst = "nb_inst_"+toString(i);
 	else
 	  expr_average_inst = "+ nb_inst_"+toString(i) + " " +expr_average_inst;
       }
 
-    _stat->create_expr_average_by_cycle("average_inst", expr_average_inst, "", _("Average instruction by cycle (all context)"));
-    _stat->create_expr_percent         ("percent_use_inst" , "average_inst", toString(_param->_size_queue), _("Percent instruction by cycle (all context)"));
+    _stat->create_expr_average_by_cycle("average_inst", expr_average_inst, "", _("Average instruction number in decod_queue by cycle (all context)"));
+    _stat->create_expr_percent         ("percent_use_inst" , "average_inst", toString(_param->_size_queue), _("Percent decod_queue's occupation (all context)"));
+    
+    _stat->create_expr_average_by_cycle("average_use_queue", "use_queue", "", _("Average slot decod_queue occupation by cycle."));
+    _stat->create_expr_percent         ("percent_use_queue", "average_use_queue", toString(_param->_size_queue), _("Percent slot decod_queue occupation."));
     
     log_end(Decod_queue,FUNCTION);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_transition.cpp	(revision 87)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_transition.cpp	(revision 88)
@@ -23,4 +23,5 @@
   {
     log_begin(Decod_queue,FUNCTION);
+    log_function(Decod_queue,FUNCTION,_name.c_str());
 
     if (PORT_READ(in_NRESET) == 0)
@@ -35,18 +36,22 @@
 	//--------------------------------------------------------------------
 	//-----[ DECOD_IN ]---------------------------------------------------
-	//--------------------------------------------------------------------
-	for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
+	//--------------------------------------------------------------------	
+        decod_queue_entry_t * entry = NULL;
+        for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
 	  {
-	    decod_queue_entry_t * entry = NULL;
 	    if (PORT_READ(in_DECOD_IN_VAL [i]) and internal_DECOD_IN_ACK[i])
 	      {
-		log_printf(TRACE,Decod_queue,FUNCTION,_("DECOD_IN  [%d]"),i);
+		log_printf(TRACE,Decod_queue,FUNCTION,_("  * DECOD_IN  [%d]"),i);
 
 		if (entry == NULL)
-		  entry = new decod_queue_entry_t (_param->_nb_inst_decod);
+                 {
+                   // Once creation and insert in queue
+                   entry = new decod_queue_entry_t (_param->_nb_inst_decod);
+                   reg_QUEUE->push_back(entry);
+                 }
 
 		Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_DECOD_IN_CONTEXT_ID [i]):0;
 
-		log_printf(TRACE,Decod_queue,FUNCTION,_("  * context : %d"),context);
+		log_printf(TRACE,Decod_queue,FUNCTION,_("    * context : %d"),context);
 
 		entry->_val           [i] = 1;
@@ -55,4 +60,5 @@
 		entry->_type          [i] = PORT_READ(in_DECOD_IN_TYPE          [i]);
 		entry->_operation     [i] = PORT_READ(in_DECOD_IN_OPERATION     [i]);
+		entry->_no_execute    [i] = PORT_READ(in_DECOD_IN_NO_EXECUTE    [i]);
 		entry->_is_delay_slot [i] = PORT_READ(in_DECOD_IN_IS_DELAY_SLOT [i]);
 		entry->_address       [i] = PORT_READ(in_DECOD_IN_ADDRESS       [i]);
@@ -70,10 +76,10 @@
 		entry->_num_reg_re    [i] = PORT_READ(in_DECOD_IN_NUM_REG_RE    [i]);
 		entry->_exception_use [i] = PORT_READ(in_DECOD_IN_EXCEPTION_USE [i]);
+		entry->_exception     [i] = PORT_READ(in_DECOD_IN_EXCEPTION     [i]);
 
 		reg_NB_INST [context] ++;
-		reg_QUEUE->push_back(entry);
 
-		log_printf(TRACE,Decod_queue,FUNCTION,_("  * nb_inst : %d"),reg_NB_INST [context]);
-		log_printf(TRACE,Decod_queue,FUNCTION,_("  * PUSH queue"));
+		log_printf(TRACE,Decod_queue,FUNCTION,_("    * nb_inst : %d"),reg_NB_INST [context]);
+		log_printf(TRACE,Decod_queue,FUNCTION,_("    * PUSH queue"));
 	      }
 	  }
@@ -91,13 +97,13 @@
 		if (internal_DECOD_OUT_VAL [i] and internal_DECOD_OUT_ACK[i])
 		  {
-		    log_printf(TRACE,Decod_queue,FUNCTION,_("DECOD_OUT [%d]"),i);
+		    log_printf(TRACE,Decod_queue,FUNCTION,_("  * DECOD_OUT [%d]"),i);
 		
 		    reg_QUEUE->front()->_val [i] = 0;
 
 		    Tcontext_t context = reg_QUEUE->front()->_context_id [i];
-		    log_printf(TRACE,Decod_queue,FUNCTION,_("  * context : %d"),context);
+		    log_printf(TRACE,Decod_queue,FUNCTION,_("    * context : %d"),context);
 		    
 		    reg_NB_INST [context] --;
-		    log_printf(TRACE,Decod_queue,FUNCTION,_("  * nb_inst : %d"),reg_NB_INST [context]);
+		    log_printf(TRACE,Decod_queue,FUNCTION,_("    * nb_inst : %d"),reg_NB_INST [context]);
 		  }
 		// Test if slot is (again) valid, if yes, then have less one instruction in the entry
@@ -108,5 +114,5 @@
 	    if (not find) // no valid instruction in current slot
 	      {
-		log_printf(TRACE,Decod_queue,FUNCTION,_("  * POP  queue"));
+		log_printf(TRACE,Decod_queue,FUNCTION,_("    * POP  queue"));
 
 		// can pop the slot
@@ -117,5 +123,6 @@
       }
 
-#if (DEBUG >= DEBUG_TRACE) and (DEBUG_Decod_queue)
+#if defined(DEBUG) and defined(DEBUG_Decod_queue) and (DEBUG >= DEBUG_TRACE)
+    log_printf(TRACE,Decod_queue,FUNCTION,"  * Dump decod_queue");
     uint32_t x=0;
     for (std::list<decod_queue_entry_t*>::iterator it=reg_QUEUE->begin();
@@ -123,10 +130,10 @@
 	 it++)
       {
-	log_printf(TRACE,Decod_queue,FUNCTION,"[%d] ",x);
+	log_printf(TRACE,Decod_queue,FUNCTION,"    * [%d] ",x);
 
 	for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
 	  {
 	    if ((*it)->_val [i])
-	      log_printf(TRACE,Decod_queue,FUNCTION," * [%d] %d, %d %d, %d %d %d, 0x%x, %d 0x%x, %d %d, %d %d, %d %d, %d %d, %d %d, %d "
+	      log_printf(TRACE,Decod_queue,FUNCTION,"      * [%d] %d, %d %d, %d %d %d %d, 0x%x, %d 0x%x, %d %d, %d %d, %d %d, %d %d, %d %d, %d %d"
 			 ,i
 			 ,(*it)->_val           [i]
@@ -135,4 +142,5 @@
 			 ,(*it)->_type          [i]
 			 ,(*it)->_operation     [i]
+			 ,(*it)->_no_execute    [i]
 			 ,(*it)->_is_delay_slot [i]
 			 ,(*it)->_address       [i]
@@ -150,7 +158,8 @@
 			 ,(*it)->_num_reg_re    [i]
 			 ,(*it)->_exception_use [i]
+			 ,(*it)->_exception     [i]
 			 );
 	    else
-	      log_printf(TRACE,Decod_queue,FUNCTION," * [%d] %d"
+	      log_printf(TRACE,Decod_queue,FUNCTION,"      * [%d] %d"
 			 ,i
 			 ,(*it)->_val           [i]
@@ -163,6 +172,10 @@
     
 #ifdef STATISTICS
-    for (uint32_t i=0; i<_param->_nb_context; i++)
-      *(_stat_nb_inst [i]) += reg_NB_INST [i];
+    if (usage_is_set(_usage,USE_STATISTICS))
+      {	
+        *(_stat_use_queue) += reg_QUEUE->size();
+        for (uint32_t i=0; i<_param->_nb_context; i++)
+          *(_stat_nb_inst [i]) += reg_NB_INST [i];
+      }
 #endif
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Parameters.cpp	(revision 87)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Parameters.cpp	(revision 88)
@@ -10,5 +10,5 @@
 
 namespace morpheo {
-namespace behavioural {
+  namespace behavioural {
 namespace core {
 namespace multi_front_end {
@@ -24,5 +24,6 @@
 			  uint32_t   size_queue          ,
 			  uint32_t   size_general_data   ,
-			  uint32_t * nb_branch_speculated)
+			  uint32_t * nb_branch_speculated,
+                          bool       is_toplevel         )
   {
     log_begin(Decod_queue,FUNCTION);
@@ -31,5 +32,5 @@
     _nb_inst_decod        = nb_inst_decod       ;
     _size_queue           = size_queue          ;
-    _size_general_data    = size_general_data   ;
+//  _size_general_data    = size_general_data   ;
     _nb_branch_speculated = nb_branch_speculated;
 
@@ -37,12 +38,19 @@
     _size_bank            = _size_queue / _nb_bank;
     
-    _size_context_id      = log2(nb_context);
-    _size_depth           = log2(max<uint32_t>(_nb_branch_speculated,_nb_context));
-    _size_nb_inst         = log2(_size_queue);
+    test();
 
-    _have_port_context_id = (_size_context_id > 0);
-    _have_port_depth      = (_size_depth      > 0);
-    
-    test();
+    if (is_toplevel)
+      {
+        _size_context_id      = log2(nb_context);
+        _size_nb_inst_decod   = log2(_size_queue)+1;
+        _size_depth           = log2(max<uint32_t>(_nb_branch_speculated,_nb_context));
+        _size_general_data    = size_general_data;
+
+        _have_port_context_id = _size_context_id > 0;
+        _have_port_depth      = _size_depth > 0;
+
+        copy ();
+      }
+
     log_end(Decod_queue,FUNCTION);
   };
@@ -62,4 +70,14 @@
   {
     log_begin(Decod_queue,FUNCTION);
+
+    log_end(Decod_queue,FUNCTION);
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Decod_queue::copy"
+  void Parameters::copy (void) 
+  {
+    log_begin(Decod_queue,FUNCTION);
+
     log_end(Decod_queue,FUNCTION);
   };
