Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/include/Free_List_unit.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/include/Free_List_unit.h	(revision 106)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/include/Free_List_unit.h	(revision 108)
@@ -89,5 +89,5 @@
 
     // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  private   : uint32_t                        internal_BANK_PRIORITY;
+  private   : uint32_t                        reg_BANK_PRIORITY;
 
   private   : Tcontrol_t                    * internal_POP_ACK      ; //[nb_pop]
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_genMealy_pop.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_genMealy_pop.cpp	(revision 106)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_genMealy_pop.cpp	(revision 108)
@@ -28,21 +28,30 @@
     for (uint32_t i=0; i<_param->_nb_pop; i++)
       {
-	uint32_t offset = i*_param->_nb_bank_by_pop;
+        log_printf(TRACE,Free_List_unit,FUNCTION,"  * POP [%d]",i);
+
+ 	uint32_t offset = i*_param->_nb_bank_by_pop;
 
 	// GPR
 	bool gpr_ack = not PORT_READ(in_POP_GPR_VAL[i]);
 
+        log_printf(TRACE,Free_List_unit,FUNCTION,"    * GPR_VAL : %d",PORT_READ(in_POP_GPR_VAL[i]));
+
 	if (not gpr_ack)
 	  for (uint32_t j=0; j<_param->_nb_bank_by_pop; j++)
 	    {
-	      uint32_t bank = offset+((j+internal_BANK_PRIORITY)%_param->_nb_bank_by_pop);
+	      uint32_t bank = offset+((j+reg_BANK_PRIORITY)%_param->_nb_bank_by_pop
+                                      );
+
+              log_printf(TRACE,Free_List_unit,FUNCTION,"    * bank    : %d",bank);
 	      
 	      if (not _gpr_list[bank].empty())
 		{
 		  // find
+                  log_printf(TRACE,Free_List_unit,FUNCTION,"    * find    : %d",_gpr_list[bank].front());
+
 		  gpr_ack = true;
 		  internal_POP_GPR_BANK [i] = bank;
 		  PORT_WRITE(out_POP_GPR_NUM_REG [i],
-			     //(bank << _param->_shift) |
+			     //(bank << _param->_shift) | // only in VHDL
 			     _gpr_list[bank].front());
 		  
@@ -54,16 +63,23 @@
 	bool spr_ack = not PORT_READ(in_POP_SPR_VAL[i]);
 
+        log_printf(TRACE,Free_List_unit,FUNCTION,"    * SPR_VAL : %d",PORT_READ(in_POP_SPR_VAL[i]));
+
 	if (not spr_ack)
 	  for (uint32_t j=0; j<_param->_nb_bank_by_pop; j++)
 	    {
-	      uint32_t bank = offset+((j+internal_BANK_PRIORITY)%_param->_nb_bank_by_pop);
+	      uint32_t bank = offset+((j+reg_BANK_PRIORITY)%_param->_nb_bank_by_pop
+                                      );
+
+              log_printf(TRACE,Free_List_unit,FUNCTION,"    * bank    : %d",bank);
 	      
 	      if (not _spr_list[bank].empty())
 		{
 		  // find
+                  log_printf(TRACE,Free_List_unit,FUNCTION,"    * find    : %d",_spr_list[bank].front());
+
 		  spr_ack = true;
 		  internal_POP_SPR_BANK [i] = bank;
 		  PORT_WRITE(out_POP_SPR_NUM_REG [i],
-			     //(bank << _param->_shift) |
+			     //(bank << _param->_shift) | // only in VHDL
 			     _spr_list[bank].front());
 		  
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_genMealy_push_gpr.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_genMealy_push_gpr.cpp	(revision 106)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_genMealy_push_gpr.cpp	(revision 108)
@@ -26,4 +26,5 @@
     log_function(Free_List_unit,FUNCTION,_name.c_str());
 
+    // bank conflit
     bool bank_use [_param->_nb_bank];
     for (uint32_t i=0; i<_param->_nb_bank; i++)
@@ -32,13 +33,22 @@
     for (uint32_t i=0; i<_param->_nb_push; i++)
       {
+        log_printf(TRACE,Free_List_unit,FUNCTION,"  * PUSH [%d]",i);
+
 	bool gpr_ack = not PORT_READ(in_PUSH_GPR_VAL[i]);
+        
+        log_printf(TRACE,Free_List_unit,FUNCTION,"    * GPR_VAL : %d",PORT_READ(in_PUSH_GPR_VAL[i]));
 
 	if (not gpr_ack)
 	  {
-	    // num_bank : MSB
-	    uint32_t bank = PORT_READ(in_PUSH_GPR_NUM_REG[i]) >> _param->_bank_gpr_size_slot;
+//  	    // num_bank : MSB
+// 	    uint32_t bank = PORT_READ(in_PUSH_GPR_NUM_REG[i]) >> _param->_bank_gpr_size_slot;
+ 	    // num_bank : LSB
+	    uint32_t bank = PORT_READ(in_PUSH_GPR_NUM_REG[i]) & _param->_mask_gpr;
 	    
 	    if (not bank_use [bank])
 	      {
+                log_printf(TRACE,Free_List_unit,FUNCTION,"    * find ");
+                log_printf(TRACE,Free_List_unit,FUNCTION,"    * bank    : %d",bank);
+
 		// find
 		gpr_ack = true;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_genMealy_push_spr.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_genMealy_push_spr.cpp	(revision 106)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_genMealy_push_spr.cpp	(revision 108)
@@ -36,6 +36,8 @@
 	if (not spr_ack)
 	  {
-	    // num_bank : MSB
-	    uint32_t bank = PORT_READ(in_PUSH_SPR_NUM_REG[i]) >> _param->_bank_spr_size_slot;
+// 	    // num_bank : MSB
+// 	    uint32_t bank = PORT_READ(in_PUSH_SPR_NUM_REG[i]) >> _param->_bank_spr_size_slot;
+	    // num_bank : LSB
+	    uint32_t bank = PORT_READ(in_PUSH_SPR_NUM_REG[i]) & _param->_mask_spr;
 	    
 	    if (not bank_use [bank])
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_transition.cpp	(revision 106)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_transition.cpp	(revision 108)
@@ -28,5 +28,5 @@
     if (PORT_READ(in_NRESET) == 0)
       {
-	internal_BANK_PRIORITY = 0;
+	reg_BANK_PRIORITY = 0;
 	for (uint32_t i=0; i<_param->_nb_bank; i++)
 	  {
@@ -59,7 +59,8 @@
             {
               log_printf(TRACE,Free_List_unit,FUNCTION,"  * PUSH_GPR[%d]",i);
+              log_printf(TRACE,Free_List_unit,FUNCTION,"    * bank    : %d",internal_PUSH_GPR_BANK[i]);
+              log_printf(TRACE,Free_List_unit,FUNCTION,"    * num_reg : %d",PORT_READ(in_PUSH_GPR_NUM_REG [i]));
 
-              _gpr_list [internal_PUSH_GPR_BANK[i]].push_back(//_param->_mask_gpr &
-                                                              PORT_READ(in_PUSH_GPR_NUM_REG [i]));
+              _gpr_list [internal_PUSH_GPR_BANK[i]].push_back(PORT_READ(in_PUSH_GPR_NUM_REG [i]));
             }
 	// ==================================================
@@ -70,11 +71,12 @@
             {
               log_printf(TRACE,Free_List_unit,FUNCTION,"  * PUSH_SPR[%d]",i);
+              log_printf(TRACE,Free_List_unit,FUNCTION,"    * bank    : %d",internal_PUSH_SPR_BANK[i]);
+              log_printf(TRACE,Free_List_unit,FUNCTION,"    * num_reg : %d",PORT_READ(in_PUSH_SPR_NUM_REG [i]));
 
-              _spr_list [internal_PUSH_SPR_BANK[i]].push_back(//_param->_mask_spr &
-                                                              PORT_READ(in_PUSH_SPR_NUM_REG [i]));
+              _spr_list [internal_PUSH_SPR_BANK[i]].push_back(PORT_READ(in_PUSH_SPR_NUM_REG [i]));
             }
 
-	if (_param->_priority == PRIORITY_ROUND_ROBIN)
-	  internal_BANK_PRIORITY = (internal_BANK_PRIORITY+1)%_param->_nb_bank_by_pop;
+ 	if (_param->_priority == PRIORITY_ROUND_ROBIN)
+          reg_BANK_PRIORITY = (reg_BANK_PRIORITY+1)%_param->_nb_bank_by_pop;
 
 #if (DEBUG >= DEBUG_TRACE) and (DEBUG_Free_List_unit == true)
@@ -83,10 +85,11 @@
       
           log_printf(TRACE,Free_List_unit,FUNCTION,"  * Dump Free List");
-          
           for (uint32_t i=0; i<_param->_nb_bank; ++i)
             {
+              log_printf(TRACE,Free_List_unit,FUNCTION,"    * GPR [%d] - NB_ELT : %d",i,_gpr_list[i].size());
+
               uint32_t j=0;
-              for (std::list<Tgeneral_address_t>::iterator it=_gpr_list->begin();
-                   it!=_gpr_list->end();
+              for (std::list<Tgeneral_address_t>::iterator it=_gpr_list[i].begin();
+                   it!=_gpr_list[i].end();
                    )
                 {
@@ -95,5 +98,5 @@
                   for (uint32_t x=0; x<limit; x++)
                     {
-                      if (it==_gpr_list->end())
+                      if (it==_gpr_list[i].end())
                         break;
                       else
@@ -108,7 +111,9 @@
           for (uint32_t i=0; i<_param->_nb_bank; ++i)
             {
+              log_printf(TRACE,Free_List_unit,FUNCTION,"    * SPR [%d] - NB_ELT : %d",i,_spr_list[i].size());
+
               uint32_t j=0;
-              for (std::list<Tspecial_address_t>::iterator it=_spr_list->begin();
-                   it!=_spr_list->end();
+              for (std::list<Tspecial_address_t>::iterator it=_spr_list[i].begin();
+                   it!=_spr_list[i].end();
                    )
                 {
@@ -117,5 +122,5 @@
                   for (uint32_t x=0; x<limit; x++)
                     {
-                      if (it==_spr_list->end())
+                      if (it==_spr_list[i].end())
                         break;
                       else
@@ -132,7 +137,8 @@
 #ifdef DEBUG_TEST
         if (1)
+          for (uint32_t i=0; i<_param->_nb_bank; ++i)
           {
-            for (std::list<Tgeneral_address_t>::iterator it1=_gpr_list->begin();
-                 it1!=_gpr_list->end();
+            for (std::list<Tgeneral_address_t>::iterator it1=_gpr_list[i].begin();
+                 it1!=_gpr_list[i].end();
                  ++it1
                  )
@@ -141,5 +147,5 @@
 
                 it2 ++;
-                while (it2 != _gpr_list->end())
+                while (it2 != _gpr_list[i].end())
                   {
                     if (*it1 == *it2)
@@ -149,6 +155,6 @@
               }
 
-            for (std::list<Tspecial_address_t>::iterator it1=_spr_list->begin();
-                 it1!=_spr_list->end();
+            for (std::list<Tspecial_address_t>::iterator it1=_spr_list[i].begin();
+                 it1!=_spr_list[i].end();
                  ++it1
                  )
@@ -157,5 +163,5 @@
 
                 it2 ++;
-                while (it2 != _spr_list->end())
+                while (it2 != _spr_list[i].end())
                   {
                     if (*it1 == *it2)
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Parameters.cpp	(revision 106)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Parameters.cpp	(revision 108)
@@ -52,5 +52,5 @@
     _bank_gpr_size_slot    = size_general_register-log2(nb_bank);
 
-    _mask_gpr              = gen_mask<Tgeneral_address_t> (_bank_gpr_size_slot);
+    _mask_gpr              = gen_mask<Tgeneral_address_t> (log2(nb_bank));
 
     uint32_t spr_nb_slot   = nb_special_register - nb_thread*_nb_special_register_logic;
@@ -59,5 +59,5 @@
     _bank_spr_size_slot    = size_special_register-log2(nb_bank);
 
-    _mask_spr              = gen_mask<Tspecial_address_t> (_bank_spr_size_slot);
+    _mask_spr              = gen_mask<Tspecial_address_t> (log2(nb_bank));
 
     if (is_toplevel)
