Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit.cpp	(revision 121)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit.cpp	(revision 123)
@@ -38,9 +38,9 @@
     log_printf(FUNC,Stat_List_unit,FUNCTION,"Begin");
 
-#if DEBUG_Stat_List_unit == true
-    log_printf(INFO,Stat_List_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
+// #if DEBUG_Stat_List_unit == true
+//     log_printf(INFO,Stat_List_unit,FUNCTION,_("<%s> Parameters"),_name.c_str());
 
-    std::cout << *param << std::endl;
-#endif    
+//     std::cout << *param << std::endl;
+// #endif    
 
     log_printf(INFO,Stat_List_unit,FUNCTION,"Allocation");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_allocation.cpp	(revision 121)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_allocation.cpp	(revision 123)
@@ -125,4 +125,17 @@
      }
 
+    // ~~~~~[ interface : "info" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#ifdef DEBUG_TEST
+     {
+       ALLOC0_INTERFACE_BEGIN("info",IN, NORTH, _("Information"));
+
+       ALLOC0_SIGNAL_IN ( in_INFO_ROB_EMPTY  ,"rob_empty"  ,bool    ,1);
+       ALLOC0_SIGNAL_IN ( in_INFO_NB_GPR_FREE,"nb_gpr_free",uint32_t,_param->_size_general_register+1);
+       ALLOC0_SIGNAL_IN ( in_INFO_NB_SPR_FREE,"nb_spr_free",uint32_t,_param->_size_special_register+1);
+
+       ALLOC0_INTERFACE_END();
+     }
+#endif
+
     // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
     if (usage_is_set(_usage,USE_SYSTEMC))
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_deallocation.cpp	(revision 121)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_deallocation.cpp	(revision 123)
@@ -71,4 +71,10 @@
         DELETE1_SIGNAL(out_PUSH_SPR_NUM_REG,_param->_nb_reg_free,_param->_size_special_register);
 
+#ifdef DEBUG_TEST
+        DELETE0_SIGNAL( in_INFO_ROB_EMPTY  ,1);
+        DELETE0_SIGNAL( in_INFO_NB_GPR_FREE,_param->_size_general_register+1);
+        DELETE0_SIGNAL( in_INFO_NB_SPR_FREE,_param->_size_special_register+1);
+#endif
+
         DELETE2(gpr_stat_list             ,_param->_nb_bank,_param->_nb_general_register_by_bank);
         DELETE2(spr_stat_list             ,_param->_nb_bank,_param->_nb_special_register_by_bank);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_genMoore.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_genMoore.cpp	(revision 121)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_genMoore.cpp	(revision 123)
@@ -28,4 +28,6 @@
     log_function(Stat_List_unit,FUNCTION,_name.c_str());
 
+    if (PORT_READ(in_NRESET))
+      {
     uint32_t  gpr_ptr = reg_GPR_PTR_FREE;
     uint32_t  spr_ptr = reg_SPR_PTR_FREE;
@@ -81,5 +83,4 @@
 	  internal_PUSH_GPR_NUM_REG  [i] = gpr_ptr ;
 
-	  PORT_WRITE(out_PUSH_GPR_VAL [i], val);
 	  if (val)
 	    PORT_WRITE(out_PUSH_GPR_NUM_REG[i], ((bank_gpr<<_param->_shift_gpr) | gpr_ptr));
@@ -126,5 +127,4 @@
 	  internal_PUSH_SPR_NUM_REG  [i] = spr_ptr ;
 
-	  PORT_WRITE(out_PUSH_SPR_VAL [i], val);
 	  if (val)
 	    PORT_WRITE(out_PUSH_SPR_NUM_REG[i], ((bank_spr<<_param->_shift_spr) | spr_ptr));
@@ -133,5 +133,24 @@
 
       }
-    
+      }
+    else
+      {
+        for (uint32_t i=0; i<_param->_nb_reg_free; i++)
+          {
+            internal_PUSH_GPR_VAL      [i] = 0;
+//          internal_PUSH_GPR_NUM_BANK [i] = bank_gpr;
+//          internal_PUSH_GPR_NUM_REG  [i] = gpr_ptr ;
+            internal_PUSH_SPR_VAL      [i] = 0;
+// 	    internal_PUSH_SPR_NUM_BANK [i] = bank_spr;
+// 	    internal_PUSH_SPR_NUM_REG  [i] = spr_ptr ;
+          }
+      }
+
+    for (uint32_t i=0; i<_param->_nb_reg_free; i++)
+      {
+        PORT_WRITE(out_PUSH_GPR_VAL [i], internal_PUSH_GPR_VAL      [i]);
+        PORT_WRITE(out_PUSH_SPR_VAL [i], internal_PUSH_SPR_VAL      [i]);
+      }
+  
     log_end(Stat_List_unit,FUNCTION);
   };
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_transition.cpp	(revision 121)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_transition.cpp	(revision 123)
@@ -43,4 +43,68 @@
     else
       {
+#ifdef DEBUG_TEST
+        {
+          uint32_t free_list_nb_gpr_free     = PORT_READ(in_INFO_NB_GPR_FREE);
+          uint32_t free_list_nb_spr_free     = PORT_READ(in_INFO_NB_SPR_FREE);
+          uint32_t stat_list_nb_gpr_free     = 0;
+          uint32_t stat_list_nb_spr_free     = 0;
+          uint32_t stat_list_nb_gpr_can_free = 0;
+          uint32_t stat_list_nb_spr_can_free = 0;
+          uint32_t stat_list_nb_gpr_link     = 0;
+          uint32_t stat_list_nb_spr_link     = 0;
+          uint32_t stat_list_nb_gpr_use      = 0;
+          uint32_t stat_list_nb_spr_use      = 0;
+
+          for (uint32_t i=0; i<_param->_nb_bank; i++)
+            {
+              for (uint32_t j=0; j<_param->_nb_general_register_by_bank; j++)
+                {
+                  if (gpr_stat_list [i][j]._is_free)
+                    stat_list_nb_gpr_free ++;
+                  if (gpr_stat_list [i][j]._is_link)
+                    stat_list_nb_gpr_link ++;
+                  if (gpr_stat_list [i][j]._is_use)
+                    stat_list_nb_gpr_use ++;
+                  if (gpr_stat_list [i][j].can_free())
+                    stat_list_nb_gpr_can_free ++;
+                }
+              for (uint32_t j=0; j<_param->_nb_special_register_by_bank; j++)
+                {
+                  if (spr_stat_list [i][j]._is_free)
+                    stat_list_nb_spr_free ++;
+                  if (spr_stat_list [i][j]._is_link)
+                    stat_list_nb_spr_link ++;
+                  if (spr_stat_list [i][j]._is_use)
+                    stat_list_nb_spr_use ++;
+                  if (spr_stat_list [i][j].can_free())
+                    stat_list_nb_spr_can_free ++;
+                }
+            }
+
+          uint32_t  nb_gpr_free = stat_list_nb_gpr_free+stat_list_nb_gpr_can_free;
+          uint32_t  nb_spr_free = stat_list_nb_spr_free+stat_list_nb_spr_can_free;
+          uint32_t _nb_gpr_free = (_param->_nb_general_register - _param->_nb_gpr_use_init); 
+          uint32_t _nb_spr_free = (_param->_nb_special_register - _param->_nb_spr_use_init); 
+          uint32_t  nb_gpr_link = stat_list_nb_gpr_link - _param->_nb_gpr_use_init;
+          uint32_t  nb_spr_link = stat_list_nb_spr_link - _param->_nb_spr_use_init;
+          uint32_t  nb_gpr_use  = stat_list_nb_gpr_use - _param->_nb_gpr_use_init;
+          uint32_t  nb_spr_use  = stat_list_nb_spr_use - _param->_nb_spr_use_init;
+
+          log_printf(TRACE,Stat_List_unit,FUNCTION,"  * nb_gpr_free : stat_list %d - free_list %d - free %d, link %d (%d), use %d (%d)",stat_list_nb_gpr_free,free_list_nb_gpr_free,nb_gpr_free,nb_gpr_link,stat_list_nb_gpr_link,nb_gpr_use,stat_list_nb_gpr_use);
+          log_printf(TRACE,Stat_List_unit,FUNCTION,"  * nb_spr_free : stat_list %d - free_list %d - free %d, link %d (%d), use %d (%d)",stat_list_nb_spr_free,free_list_nb_spr_free,nb_spr_free,nb_spr_link,stat_list_nb_spr_link,nb_spr_use,stat_list_nb_spr_use);
+
+          if (free_list_nb_gpr_free != stat_list_nb_gpr_free)
+            throw ERRORMORPHEO(FUNCTION,toString(_("Number of free general register is not valid. %d in Stat_List and %d in Free_list.\n"),stat_list_nb_gpr_free,free_list_nb_gpr_free));
+          if (free_list_nb_spr_free != stat_list_nb_spr_free)
+            throw ERRORMORPHEO(FUNCTION,toString(_("Number of free general register is not valid. %d in Stat_List and %d in Free_list.\n"),stat_list_nb_spr_free,free_list_nb_spr_free));
+
+          if (PORT_READ(in_INFO_ROB_EMPTY) and (nb_gpr_free != _nb_gpr_free))
+            throw ERRORMORPHEO(FUNCTION,toString(_("Rob is empty but they have %d general registers free or can_free and must be %d registers."),nb_gpr_free,_nb_gpr_free));
+
+          if (PORT_READ(in_INFO_ROB_EMPTY) and (nb_spr_free != _nb_spr_free))
+            throw ERRORMORPHEO(FUNCTION,toString(_("Rob is empty but they have %d special registers free or can_free and must be %d registers."),nb_spr_free,_nb_spr_free));
+        }
+#endif
+
 	// =====================================================
 	// =====[ INSERT ]======================================
@@ -256,10 +320,11 @@
       for (uint32_t i=0; i<_param->_nb_bank; i++)
         for (uint32_t j=0; j<_param->_nb_general_register_by_bank; j++)
-          log_printf(TRACE,Stat_List_unit,FUNCTION,"    * GPR[%.4d][%.5d] (%.5d) - free %.1d, link %.1d",
+          log_printf(TRACE,Stat_List_unit,FUNCTION,"    * GPR[%.4d][%.5d] (%.5d) - free %.1d, link %.1d, use %.1d",
                      i,
                      j,
                      (i<<_param->_shift_gpr)|j,
                      gpr_stat_list[i][j]._is_free,
-                     gpr_stat_list[i][j]._is_link// ,
+                     gpr_stat_list[i][j]._is_link,
+                     gpr_stat_list[i][j]._is_use// ,
 //                      gpr_stat_list[i][j]._is_valid,
 //                      gpr_stat_list[i][j]._counter
@@ -267,10 +332,11 @@
       for (uint32_t i=0; i<_param->_nb_bank; i++)
         for (uint32_t j=0; j<_param->_nb_special_register_by_bank; j++)
-          log_printf(TRACE,Stat_List_unit,FUNCTION,"    * SPR[%.4d][%.5d] (%.5d) - free %.1d, link %.1d",
+          log_printf(TRACE,Stat_List_unit,FUNCTION,"    * SPR[%.4d][%.5d] (%.5d) - free %.1d, link %.1d, use %.1d",
                      i,
                      j,
                      (i<<_param->_shift_spr)|j,
                      spr_stat_list[i][j]._is_free,
-                     spr_stat_list[i][j]._is_link// ,
+                     spr_stat_list[i][j]._is_link,
+                     spr_stat_list[i][j]._is_use// ,
 //                      spr_stat_list[i][j]._is_valid,
 //                      spr_stat_list[i][j]._counter
