Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/include/Parameters.h	(revision 119)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/include/Parameters.h	(revision 120)
@@ -40,4 +40,5 @@
   public : bool    *** _table_routing                ; //[nb_execute_unit][nb_execute_unit_port][nb_write_unit]
   public : bool     ** _table_thread                 ; //[nb_write_unit][nb_thread]
+  public : bool      * _num_thread_valid             ; //[nb_thread]
 
   public : uint32_t    _max_nb_execute_unit_port     ;
@@ -71,4 +72,5 @@
 			bool    *** table_routing                ,
 			bool     ** table_thread                 ,
+                        bool      * num_thread_valid             , //[nb_thread]
                         bool        is_toplevel=false
                         );
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/src/Parameters.cpp	(revision 119)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/src/Parameters.cpp	(revision 120)
@@ -33,4 +33,5 @@
 			  bool    *** table_routing                ,//[nb_execute_unit][nb_execute_unit_port][nb_write_unit]
 			  bool     ** table_thread                 ,//[nb_write_unit][nb_thread]                            
+                          bool      * num_thread_valid             ,//[nb_thread]
                           bool        is_toplevel                  )
   {
@@ -49,4 +50,5 @@
     _table_routing           = table_routing       ;
     _table_thread            = table_thread        ;
+    _num_thread_valid        = num_thread_valid    ;
 
     _max_nb_execute_unit_port= max<uint32_t>(_nb_execute_unit_port, _nb_execute_unit);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/include/Parameters.h	(revision 119)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/include/Parameters.h	(revision 120)
@@ -44,4 +44,5 @@
   public : bool     ** _table_execute_type     ; //[nb_execute_unit][nb_type]
   public : bool     ** _table_execute_thread   ; //[nb_execute_unit][nb_thread]
+  public : bool      * _num_thread_valid       ; //[nb_thread]
 
   public : uint32_t    _max_nb_read_unit_port  ;
@@ -83,4 +84,5 @@
 			bool     ** table_execute_type     ,
 			bool     ** table_execute_thread   ,
+                        bool      * num_thread_valid       ,
                         bool        is_toplevel=false      );
 //   public : Parameters  (Parameters & param) ;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/src/Parameters.cpp	(revision 119)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/src/Parameters.cpp	(revision 120)
@@ -38,4 +38,5 @@
 			  bool     ** table_execute_type     ,
 			  bool     ** table_execute_thread   ,
+                          bool      * num_thread_valid       ,
                           bool        is_toplevel            )
   {
@@ -56,4 +57,5 @@
     _table_execute_type      = table_execute_type  ;
     _table_execute_thread    = table_execute_thread;
+    _num_thread_valid        = num_thread_valid    ;
 
     log_printf(TRACE,Read_unit_to_Execution_unit,FUNCTION,"  * table_routing [nb_read_unit][nb_execute_unit][nb_execute_unit_port]");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/src/Parameters_msg_error.cpp	(revision 119)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/src/Parameters_msg_error.cpp	(revision 120)
@@ -41,5 +41,4 @@
     // TYPE_BRANCH  |     X     |            |            |
     // TYPE_MEMORY  |           |            |     X      |
-    
     bool type_present [_nb_thread][_nb_type];
     for (uint32_t i=0; i<_nb_thread; i++)
@@ -49,5 +48,6 @@
     for (uint32_t i=0; i<_nb_execute_unit; i++)
       for (uint32_t j=0; j<_nb_thread; j++)
-	if (_table_execute_thread [i][j] == true)
+	if (_num_thread_valid [j] and
+            (_table_execute_thread [i][j] == true))
 	  // this execute_unit execute this thread !
 	  for (Ttype_t k=0; k<_nb_type; k++)
@@ -66,5 +66,6 @@
       if (not is_type_valid(j))
 	for (uint32_t i=0; i<_nb_thread; i++)
-	  if (type_present [i][j])
+	  if (_num_thread_valid [j] and
+              (type_present [i][j]))
 	    test.error(toString(_("The thread '%d' can execute the type's operation '%s' but this type is invalid.\n"),i,toString(j).c_str()));
 
@@ -72,5 +73,6 @@
       if (is_type_valid(j) and not is_type_optionnal(j))
 	for (uint32_t i=0; i<_nb_thread; i++)
-	  if (not type_present [i][j])
+	  if (_num_thread_valid [i] and
+              (not type_present [i][j]))
 	    test.error(toString(_("The thread '%d' can't access at the execute_unit to execute the type's operation '%s' (and this type is not optional !).\n"),i,toString(j).c_str()));
 	    
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/include/Parameters.h	(revision 119)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/include/Parameters.h	(revision 120)
@@ -103,4 +103,6 @@
   public : uint32_t            * _translate_num_execute_unit                    ; //[nb_execute_unit]
 
+  public : bool                * _num_thread_valid                              ; //[nb_thread]
+
   public : uint32_t              _nb_execute_unit              ;
   public : uint32_t            * _nb_execute_unit_port         ;
@@ -198,4 +200,6 @@
                         uint32_t            * translate_num_execute_unit                    ,//[nb_execute_unit]
 
+                        bool                * num_thread_valid                              ,//[nb_thread]
+
                         bool                  is_toplevel=false
                         );
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/src/Parameters.cpp	(revision 119)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/src/Parameters.cpp	(revision 120)
@@ -73,4 +73,6 @@
                           bool                * is_load_store_unit                        ,//[nb_execute_unit]
                           uint32_t            * translate_num_execute_unit                ,//[nb_execute_unit]
+
+                          bool                * num_thread_valid                          ,//[nb_thread]
                           
                           bool                  is_toplevel
@@ -133,4 +135,6 @@
     _translate_num_execute_unit                 = translate_num_execute_unit;
 
+    _num_thread_valid                           = num_thread_valid;
+
     _nb_execute_unit                            = _nb_functionnal_unit + _nb_load_store_unit;
 
@@ -481,5 +485,6 @@
        _read_unit_to_execution_unit_table_routing     ,
        _read_unit_to_execution_unit_table_execute_type,
-       _read_unit_to_execution_unit_table_thread      );
+       _read_unit_to_execution_unit_table_thread      ,
+       _num_thread_valid);
     
     log_printf(TRACE,Execute_loop,FUNCTION,"Parameters : execution_unit_to_write_unit");
@@ -499,5 +504,6 @@
        _execution_unit_to_write_unit_priority     ,
        _execution_unit_to_write_unit_table_routing,
-       _execution_unit_to_write_unit_table_thread );
+       _execution_unit_to_write_unit_table_thread ,
+       _num_thread_valid);
       
     log_printf(TRACE,Execute_loop,FUNCTION,"Parameters : register_unit");
