Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_vhdl_body.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_vhdl_body.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_vhdl_body.cpp	(revision 97)
@@ -22,28 +22,28 @@
   {
     log_printf(FUNC,Read_queue,"vhdl_body","Begin");
-    vhdl->set_body ("");
-    vhdl->set_body("");
-    vhdl->set_body("-----------------------------------");
-    vhdl->set_body("-- Instance queue                  ");
-    vhdl->set_body("-----------------------------------");
-    vhdl->set_body("");
-
-    vhdl->set_body("instance_"+_name+"_queue : "+_name+"_queue");
-    vhdl->set_body("port map (");
-    vhdl->set_body("\t  in_CLOCK       \t=>\t      in_CLOCK ");
-    vhdl->set_body("\t, in_NRESET      \t=>\t      in_NRESET");
-    vhdl->set_body("\t, in_INSERT_VAL  \t=>\tinternal_QUEUE_INSERT_VAL");
-    vhdl->set_body("\t,out_INSERT_ACK  \t=>\tinternal_QUEUE_INSERT_ACK");
-    vhdl->set_body("\t, in_INSERT_DATA \t=>\tinternal_QUEUE_INSERT_DATA");
-    vhdl->set_body("\t,out_RETIRE_VAL  \t=>\tinternal_QUEUE_RETIRE_VAL");
-    vhdl->set_body("\t, in_RETIRE_ACK  \t=>\tinternal_QUEUE_RETIRE_ACK");
-    vhdl->set_body("\t,out_RETIRE_DATA \t=>\tinternal_QUEUE_RETIRE_DATA");
-    vhdl->set_body(");");
-
-    vhdl->set_body("");
-    vhdl->set_body("-----------------------------------");
-    vhdl->set_body("-- Queue_data                      ");
-    vhdl->set_body("-----------------------------------");
-    vhdl->set_body("");
+    vhdl->set_body(0,"");
+    vhdl->set_body(0,"");
+    vhdl->set_body(0,"-----------------------------------");
+    vhdl->set_body(0,"-- Instance queue                  ");
+    vhdl->set_body(0,"-----------------------------------");
+    vhdl->set_body(0,"");
+
+    vhdl->set_body(0,"instance_"+_name+"_queue : "+_name+"_queue");
+    vhdl->set_body(0,"port map (");
+    vhdl->set_body(1,"  in_CLOCK       \t=>\t      in_CLOCK ");
+    vhdl->set_body(1,", in_NRESET      \t=>\t      in_NRESET");
+    vhdl->set_body(1,", in_INSERT_VAL  \t=>\tinternal_QUEUE_INSERT_VAL");
+    vhdl->set_body(1,",out_INSERT_ACK  \t=>\tinternal_QUEUE_INSERT_ACK");
+    vhdl->set_body(1,", in_INSERT_DATA \t=>\tinternal_QUEUE_INSERT_DATA");
+    vhdl->set_body(1,",out_RETIRE_VAL  \t=>\tinternal_QUEUE_RETIRE_VAL");
+    vhdl->set_body(1,", in_RETIRE_ACK  \t=>\tinternal_QUEUE_RETIRE_ACK");
+    vhdl->set_body(1,",out_RETIRE_DATA \t=>\tinternal_QUEUE_RETIRE_DATA");
+    vhdl->set_body(0,");");
+
+    vhdl->set_body(0,"");
+    vhdl->set_body(0,"-----------------------------------");
+    vhdl->set_body(0,"-- Queue_data                      ");
+    vhdl->set_body(0,"-----------------------------------");
+    vhdl->set_body(0,"");
     
     uint32_t min = 0;
@@ -53,5 +53,5 @@
       {
 	max = min-1+_param->_size_context_id;
-	vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_CONTEXT_ID;");
+	vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_CONTEXT_ID;");
 	min = max+1;
       }
@@ -59,5 +59,5 @@
       {
 	max = min-1+_param->_size_front_end_id;
-	vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_FRONT_END_ID;");
+	vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_FRONT_END_ID;");
 	min = max+1;
       }
@@ -65,185 +65,185 @@
       {
 	max = min-1+_param->_size_ooo_engine_id;
-	vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_OOO_ENGINE_ID;");
+	vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_OOO_ENGINE_ID;");
 	min = max+1;
       }
-    if(_param->_have_port_rob_id   )
-      {
-	max = min-1+_param->_size_rob_id;
-	vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_ROB_ID;");
+    if(_param->_have_port_rob_ptr  )
+      {
+	max = min-1+_param->_size_rob_ptr  ;
+	vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_ROB_ID;");
 	min = max+1;
       }
 
     max = min-1+_param->_size_operation;
-    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_OPERATION;");
+    vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_OPERATION;");
     min = max+1;
 
     max = min-1+_param->_size_type;
-    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_TYPE;");
-    min = max+1;
-
-    max = min;
-    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_HAS_IMMEDIAT;");
+    vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_TYPE;");
+    min = max+1;
+
+    max = min;
+    vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_HAS_IMMEDIAT;");
     min = max+1;
 
     max = min-1+_param->_size_general_data;
-    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_IMMEDIAT;");
-    min = max+1;
-
-    max = min;
-    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_READ_RA;");
+    vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_IMMEDIAT;");
+    min = max+1;
+
+    max = min;
+    vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_READ_RA;");
     min = max+1;
 
     max = min-1+_param->_size_general_register;
-    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RA;");
-    min = max+1;
-
-    max = min;
-    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_READ_RB;");
+    vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RA;");
+    min = max+1;
+
+    max = min;
+    vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_READ_RB;");
     min = max+1;
 
     max = min-1+_param->_size_general_register;
-    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RB;");
-    min = max+1;
-
-    max = min;
-    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_READ_RC;");
+    vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RB;");
+    min = max+1;
+
+    max = min;
+    vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_READ_RC;");
     min = max+1;
 
     max = min-1+_param->_size_special_register;
-    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RC;");
-    min = max+1;
-
-    max = min;
-    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_WRITE_RD;");
+    vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RC;");
+    min = max+1;
+
+    max = min;
+    vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_WRITE_RD;");
     min = max+1;
 
     max = min-1+_param->_size_general_register;
-    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RD;");
-    min = max+1;
-
-    max = min;
-    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_WRITE_RE;");
+    vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RD;");
+    min = max+1;
+
+    max = min;
+    vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_WRITE_RE;");
     min = max+1;
 
     max = min-1+_param->_size_special_register;
-    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RE;");
-    min = max+1;
-
-    vhdl->set_body ("internal_QUEUE_RETIRE_ACK <= internal_READ_QUEUE_OUT_VAL and in_READ_QUEUE_OUT_ACK;");
-
-    vhdl->set_body("");
-    vhdl->set_body("-----------------------------------");
-    vhdl->set_body("-- Interface read");
-    vhdl->set_body("-----------------------------------");
-    vhdl->set_body("");
-    vhdl->set_body("-- GPR");
-    vhdl->set_body ("out_GPR_READ_0_VAL           <= internal_QUEUE_RETIRE_VAL and internal_READ_RA_VAL;");
-    vhdl->set_body ("out_GPR_READ_1_VAL           <= internal_QUEUE_RETIRE_VAL and internal_READ_RB_VAL;");
+    vhdl->set_body(0,"internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RE;");
+    min = max+1;
+
+    vhdl->set_body(0,"internal_QUEUE_RETIRE_ACK <= internal_READ_QUEUE_OUT_VAL and in_READ_QUEUE_OUT_ACK;");
+
+    vhdl->set_body(0,"");
+    vhdl->set_body(0,"-----------------------------------");
+    vhdl->set_body(0,"-- Interface read");
+    vhdl->set_body(0,"-----------------------------------");
+    vhdl->set_body(0,"");
+    vhdl->set_body(0,"-- GPR");
+    vhdl->set_body(0,"out_GPR_READ_0_VAL           <= internal_QUEUE_RETIRE_VAL and internal_READ_RA_VAL;");
+    vhdl->set_body(0,"out_GPR_READ_1_VAL           <= internal_QUEUE_RETIRE_VAL and internal_READ_RB_VAL;");
     if(_param->_have_port_ooo_engine_id)
       {
-	vhdl->set_body ("out_GPR_READ_0_OOO_ENGINE_ID <= internal_OOO_ENGINE_ID;");
-	vhdl->set_body ("out_GPR_READ_1_OOO_ENGINE_ID <= internal_OOO_ENGINE_ID;");
-      }
-    vhdl->set_body ("out_GPR_READ_0_NUM_REG       <= internal_NUM_REG_RA;");
-    vhdl->set_body ("out_GPR_READ_1_NUM_REG       <= internal_NUM_REG_RB;");
-    vhdl->set_body("");
-    
-    vhdl->set_body("-- SPR");
-    vhdl->set_body ("out_SPR_READ_0_VAL           <= internal_QUEUE_RETIRE_VAL and internal_READ_RC_VAL;");
+	vhdl->set_body(0,"out_GPR_READ_0_OOO_ENGINE_ID <= internal_OOO_ENGINE_ID;");
+	vhdl->set_body(0,"out_GPR_READ_1_OOO_ENGINE_ID <= internal_OOO_ENGINE_ID;");
+      }
+    vhdl->set_body(0,"out_GPR_READ_0_NUM_REG       <= internal_NUM_REG_RA;");
+    vhdl->set_body(0,"out_GPR_READ_1_NUM_REG       <= internal_NUM_REG_RB;");
+    vhdl->set_body(0,"");
+    
+    vhdl->set_body(0,"-- SPR");
+    vhdl->set_body(0,"out_SPR_READ_0_VAL           <= internal_QUEUE_RETIRE_VAL and internal_READ_RC_VAL;");
     if(_param->_have_port_ooo_engine_id)
       {
-	vhdl->set_body ("out_SPR_READ_0_OOO_ENGINE_ID <= internal_OOO_ENGINE_ID;");
-      }
-    vhdl->set_body ("out_SPR_READ_0_NUM_REG       <= internal_NUM_REG_RC;");
-
-    vhdl->set_body("");
-    vhdl->set_body("-----------------------------------");
-    vhdl->set_body("-- Interface read_queue_out");
-    vhdl->set_body("-----------------------------------");
-    vhdl->set_body("");
+	vhdl->set_body(0,"out_SPR_READ_0_OOO_ENGINE_ID <= internal_OOO_ENGINE_ID;");
+      }
+    vhdl->set_body(0,"out_SPR_READ_0_NUM_REG       <= internal_NUM_REG_RC;");
+
+    vhdl->set_body(0,"");
+    vhdl->set_body(0,"-----------------------------------");
+    vhdl->set_body(0,"-- Interface read_queue_out");
+    vhdl->set_body(0,"-----------------------------------");
+    vhdl->set_body(0,"");
     
     if(_param->_have_port_context_id   )
-      vhdl->set_body ("out_READ_QUEUE_OUT_CONTEXT_ID    <= internal_CONTEXT_ID   ;");
+      vhdl->set_body(0,"out_READ_QUEUE_OUT_CONTEXT_ID    <= internal_CONTEXT_ID   ;");
     if(_param->_have_port_front_end_id   )
-      vhdl->set_body ("out_READ_QUEUE_OUT_FRONT_END_ID  <= internal_FRONT_END_ID ;");
+      vhdl->set_body(0,"out_READ_QUEUE_OUT_FRONT_END_ID  <= internal_FRONT_END_ID ;");
     if(_param->_have_port_ooo_engine_id   )
-      vhdl->set_body ("out_READ_QUEUE_OUT_OOO_ENGINE_ID <= internal_OOO_ENGINE_ID;");
-    if(_param->_have_port_rob_id   )
-      vhdl->set_body ("out_READ_QUEUE_OUT_ROB_ID        <= internal_ROB_ID       ;");
-    vhdl->set_body ("out_READ_QUEUE_OUT_OPERATION     <= internal_OPERATION    ;");
-    vhdl->set_body ("out_READ_QUEUE_OUT_TYPE          <= internal_TYPE         ;");
-    vhdl->set_body ("out_READ_QUEUE_OUT_HAS_IMMEDIAT  <= internal_HAS_IMMEDIAT ;");
-    vhdl->set_body ("out_READ_QUEUE_OUT_IMMEDIAT      <= internal_IMMEDIAT     ;");
-    vhdl->set_body ("out_READ_QUEUE_OUT_READ_RA       <= internal_READ_RA      ;");
-    vhdl->set_body ("out_READ_QUEUE_OUT_NUM_REG_RA    <= internal_NUM_REG_RA   ;");
-    vhdl->set_body ("out_READ_QUEUE_OUT_DATA_RA_VAL   <= internal_NEXT_DATA_RA_VAL;");
-    vhdl->set_body ("out_READ_QUEUE_OUT_DATA_RA       <= internal_NEXT_DATA_RA ;");
-    vhdl->set_body ("out_READ_QUEUE_OUT_READ_RB       <= internal_READ_RB      ;");
-    vhdl->set_body ("out_READ_QUEUE_OUT_NUM_REG_RB    <= internal_NUM_REG_RB   ;");
-    vhdl->set_body ("out_READ_QUEUE_OUT_DATA_RB_VAL   <= internal_NEXT_DATA_RB_VAL;");
-    vhdl->set_body ("out_READ_QUEUE_OUT_DATA_RB       <= internal_NEXT_DATA_RB ;");
-    vhdl->set_body ("out_READ_QUEUE_OUT_READ_RC       <= internal_READ_RC      ;");
-    vhdl->set_body ("out_READ_QUEUE_OUT_NUM_REG_RC    <= internal_NUM_REG_RC   ;");
-    vhdl->set_body ("out_READ_QUEUE_OUT_DATA_RC_VAL   <= internal_NEXT_DATA_RC_VAL;");
-    vhdl->set_body ("out_READ_QUEUE_OUT_DATA_RC       <= internal_NEXT_DATA_RC ;");
-    vhdl->set_body ("out_READ_QUEUE_OUT_WRITE_RD      <= internal_WRITE_RD     ;");
-    vhdl->set_body ("out_READ_QUEUE_OUT_NUM_REG_RD    <= internal_NUM_REG_RD   ;");
-    vhdl->set_body ("out_READ_QUEUE_OUT_WRITE_RE      <= internal_WRITE_RE     ;");
-    vhdl->set_body ("out_READ_QUEUE_OUT_NUM_REG_RE    <= internal_NUM_REG_RE   ;");
-    
-    vhdl->set_body("");
-    vhdl->set_body("-----------------------------------");
-    vhdl->set_body("-- next reg update");
-    vhdl->set_body("-----------------------------------");
-    vhdl->set_body("");
-    vhdl->set_body("-- read_rx_val - 1 : must access at the registerFile (after access, is set at 0)");
-    
-    {
-      vhdl->set_body("");
-      vhdl->set_body("internal_NEXT_READ_RA_VAL <=");
-      vhdl->set_body("\t'0' when");
-      // bypass
-      vhdl->set_body("\t\t-- check bypass");
-      for (int32_t i=_param->_nb_gpr_write-1; i>=0 ; i--)
-	{
-	  std::string cmp;
-	  
-	  if (_param->_have_port_ooo_engine_id)
-	    cmp = "and (in_GPR_WRITE_"+toString(i)+"_OOO_ENGINE_ID=internal_OOO_ENGINE_ID) ";
-	  else
-	    cmp = "";
-	  
-	  vhdl->set_body("\t\t((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RA=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) or");
-	}
-      vhdl->set_body("\t\tfalse else");
-      vhdl->set_body("\tinternal_READ_RA_VAL and not in_GPR_READ_0_ACK;");
-    }
-    {
-      vhdl->set_body("");
-      vhdl->set_body("internal_NEXT_READ_RB_VAL <=");
-      vhdl->set_body("\t'0' when");
-      // bypass
-      vhdl->set_body("\t\t-- check bypass");
-      for (int32_t i=_param->_nb_gpr_write-1; i>=0 ; i--)
-	{
-	  std::string cmp;
-	  
-	  if (_param->_have_port_ooo_engine_id)
-	    cmp = "and (in_GPR_WRITE_"+toString(i)+"_OOO_ENGINE_ID=internal_OOO_ENGINE_ID) ";
-	  else
-	    cmp = "";
-	  
-	  vhdl->set_body("\t\t((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RB=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) or");
-	}
-      vhdl->set_body("\t\tfalse else");
-      vhdl->set_body("\tinternal_READ_RB_VAL and not in_GPR_READ_1_ACK;");
-    }
-    {
-      vhdl->set_body("");
-      vhdl->set_body("internal_NEXT_READ_RC_VAL <=");
-      vhdl->set_body("\t'0' when");
-      // bypass
-      vhdl->set_body("\t\t-- check bypass");
+      vhdl->set_body(0,"out_READ_QUEUE_OUT_OOO_ENGINE_ID <= internal_OOO_ENGINE_ID;");
+    if(_param->_have_port_rob_ptr  )
+      vhdl->set_body(0,"out_READ_QUEUE_OUT_ROB_ID        <= internal_ROB_ID       ;");
+    vhdl->set_body(0,"out_READ_QUEUE_OUT_OPERATION     <= internal_OPERATION    ;");
+    vhdl->set_body(0,"out_READ_QUEUE_OUT_TYPE          <= internal_TYPE         ;");
+    vhdl->set_body(0,"out_READ_QUEUE_OUT_HAS_IMMEDIAT  <= internal_HAS_IMMEDIAT ;");
+    vhdl->set_body(0,"out_READ_QUEUE_OUT_IMMEDIAT      <= internal_IMMEDIAT     ;");
+//     vhdl->set_body(0,"out_READ_QUEUE_OUT_READ_RA       <= internal_READ_RA      ;");
+    vhdl->set_body(0,"out_READ_QUEUE_OUT_NUM_REG_RA    <= internal_NUM_REG_RA   ;");
+    vhdl->set_body(0,"out_READ_QUEUE_OUT_DATA_RA_VAL   <= internal_NEXT_DATA_RA_VAL;");
+    vhdl->set_body(0,"out_READ_QUEUE_OUT_DATA_RA       <= internal_NEXT_DATA_RA ;");
+//     vhdl->set_body(0,"out_READ_QUEUE_OUT_READ_RB       <= internal_READ_RB      ;");
+    vhdl->set_body(0,"out_READ_QUEUE_OUT_NUM_REG_RB    <= internal_NUM_REG_RB   ;");
+    vhdl->set_body(0,"out_READ_QUEUE_OUT_DATA_RB_VAL   <= internal_NEXT_DATA_RB_VAL;");
+    vhdl->set_body(0,"out_READ_QUEUE_OUT_DATA_RB       <= internal_NEXT_DATA_RB ;");
+//     vhdl->set_body(0,"out_READ_QUEUE_OUT_READ_RC       <= internal_READ_RC      ;");
+    vhdl->set_body(0,"out_READ_QUEUE_OUT_NUM_REG_RC    <= internal_NUM_REG_RC   ;");
+    vhdl->set_body(0,"out_READ_QUEUE_OUT_DATA_RC_VAL   <= internal_NEXT_DATA_RC_VAL;");
+    vhdl->set_body(0,"out_READ_QUEUE_OUT_DATA_RC       <= internal_NEXT_DATA_RC ;");
+    vhdl->set_body(0,"out_READ_QUEUE_OUT_WRITE_RD      <= internal_WRITE_RD     ;");
+    vhdl->set_body(0,"out_READ_QUEUE_OUT_NUM_REG_RD    <= internal_NUM_REG_RD   ;");
+    vhdl->set_body(0,"out_READ_QUEUE_OUT_WRITE_RE      <= internal_WRITE_RE     ;");
+    vhdl->set_body(0,"out_READ_QUEUE_OUT_NUM_REG_RE    <= internal_NUM_REG_RE   ;");
+    
+    vhdl->set_body(0,"");
+    vhdl->set_body(0,"-----------------------------------");
+    vhdl->set_body(0,"-- next reg update");
+    vhdl->set_body(0,"-----------------------------------");
+    vhdl->set_body(0,"");
+    vhdl->set_body(0,"-- read_rx_val - 1 : must access at the registerFile (after access, is set at 0)");
+    
+    {
+      vhdl->set_body(0,"");
+      vhdl->set_body(0,"internal_NEXT_READ_RA_VAL <=");
+      vhdl->set_body(1,"'0' when");
+      // bypass
+      vhdl->set_body(2,"-- check bypass");
+      for (int32_t i=_param->_nb_gpr_write-1; i>=0 ; i--)
+	{
+	  std::string cmp;
+	  
+	  if (_param->_have_port_ooo_engine_id)
+	    cmp = "and (in_GPR_WRITE_"+toString(i)+"_OOO_ENGINE_ID=internal_OOO_ENGINE_ID) ";
+	  else
+	    cmp = "";
+	  
+	  vhdl->set_body(2,"((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RA=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) or");
+	}
+      vhdl->set_body(2,"false else");
+      vhdl->set_body(1,"internal_READ_RA_VAL and not in_GPR_READ_0_ACK;");
+    }
+    {
+      vhdl->set_body(0,"");
+      vhdl->set_body(0,"internal_NEXT_READ_RB_VAL <=");
+      vhdl->set_body(1,"'0' when");
+      // bypass
+      vhdl->set_body(2,"-- check bypass");
+      for (int32_t i=_param->_nb_gpr_write-1; i>=0 ; i--)
+	{
+	  std::string cmp;
+	  
+	  if (_param->_have_port_ooo_engine_id)
+	    cmp = "and (in_GPR_WRITE_"+toString(i)+"_OOO_ENGINE_ID=internal_OOO_ENGINE_ID) ";
+	  else
+	    cmp = "";
+	  
+	  vhdl->set_body(2,"((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RB=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) or");
+	}
+      vhdl->set_body(2,"false else");
+      vhdl->set_body(1,"internal_READ_RB_VAL and not in_GPR_READ_1_ACK;");
+    }
+    {
+      vhdl->set_body(0,"");
+      vhdl->set_body(0,"internal_NEXT_READ_RC_VAL <=");
+      vhdl->set_body(1,"'0' when");
+      // bypass
+      vhdl->set_body(2,"-- check bypass");
       for (int32_t i=_param->_nb_spr_write-1; i>=0 ; i--)
 	{
@@ -255,25 +255,25 @@
 	    cmp = "";
 	  
-	  vhdl->set_body("\t\t((in_SPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RC=in_SPR_WRITE_"+toString(i)+"_NUM_REG)) or");
-	}
-      vhdl->set_body("\t\tfalse else");
-      vhdl->set_body("\tinternal_READ_RC_VAL and not in_SPR_READ_0_ACK;");
-    }
-    {
-      vhdl->set_body("");
-      vhdl->set_body("internal_READ_QUEUE_OUT_VAL <= not internal_NEXT_READ_RA_VAL and not internal_NEXT_READ_RB_VAL and not internal_NEXT_READ_RC_VAL;");
-      vhdl->set_body("     out_READ_QUEUE_OUT_VAL <= internal_READ_QUEUE_OUT_VAL and internal_QUEUE_RETIRE_VAL;");
+	  vhdl->set_body(2,"((in_SPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RC=in_SPR_WRITE_"+toString(i)+"_NUM_REG)) or");
+	}
+      vhdl->set_body(2,"false else");
+      vhdl->set_body(1,"internal_READ_RC_VAL and not in_SPR_READ_0_ACK;");
+    }
+    {
+      vhdl->set_body(0,"");
+      vhdl->set_body(0,"internal_READ_QUEUE_OUT_VAL <= not internal_NEXT_READ_RA_VAL and not internal_NEXT_READ_RB_VAL and not internal_NEXT_READ_RC_VAL;");
+      vhdl->set_body(0,"     out_READ_QUEUE_OUT_VAL <= internal_READ_QUEUE_OUT_VAL and internal_QUEUE_RETIRE_VAL;");
       
     }
     
-    vhdl->set_body("");
-    vhdl->set_body("-- data_rx_val - 1 : the read of registerFile is valid");
-    
-    {
-      vhdl->set_body("");
-      vhdl->set_body("internal_NEXT_DATA_RA_VAL <=");
-      vhdl->set_body("\t'1' when");
-      // bypass
-      vhdl->set_body("\t\t-- check bypass");
+    vhdl->set_body(0,"");
+    vhdl->set_body(0,"-- data_rx_val - 1 : the read of registerFile is valid");
+    
+    {
+      vhdl->set_body(0,"");
+      vhdl->set_body(0,"internal_NEXT_DATA_RA_VAL <=");
+      vhdl->set_body(1,"'1' when");
+      // bypass
+      vhdl->set_body(2,"-- check bypass");
       for (int32_t i=_param->_nb_gpr_write-1; i>=0 ; i--)
 	{
@@ -285,15 +285,15 @@
 	    cmp = "";
 	  
-	  vhdl->set_body("\t\t((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RA=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) or");
-	}
-      vhdl->set_body("\t\tfalse else");
-      vhdl->set_body("\tinternal_DATA_RA_VAL or (internal_READ_RA_VAL and in_GPR_READ_0_ACK and in_GPR_READ_0_DATA_VAL);");
-    }
-    {
-      vhdl->set_body("");
-      vhdl->set_body("internal_NEXT_DATA_RB_VAL <=");
-      vhdl->set_body("\t'1' when");
-      // bypass
-      vhdl->set_body("\t\t-- check bypass");
+	  vhdl->set_body(2,"((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RA=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) or");
+	}
+      vhdl->set_body(2,"false else");
+      vhdl->set_body(1,"internal_DATA_RA_VAL or (internal_READ_RA_VAL and in_GPR_READ_0_ACK and in_GPR_READ_0_DATA_VAL);");
+    }
+    {
+      vhdl->set_body(0,"");
+      vhdl->set_body(0,"internal_NEXT_DATA_RB_VAL <=");
+      vhdl->set_body(1,"'1' when");
+      // bypass
+      vhdl->set_body(2,"-- check bypass");
       for (int32_t i=_param->_nb_gpr_write-1; i>=0 ; i--)
 	{
@@ -305,15 +305,15 @@
 	  cmp = "";
 	  
-	  vhdl->set_body("\t\t((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RB=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) or");
-	}
-      vhdl->set_body("\t\tfalse else");
-      vhdl->set_body("\tinternal_DATA_RB_VAL or (internal_READ_RB_VAL and in_GPR_READ_1_ACK and in_GPR_READ_1_DATA_VAL);");
-    }
-    {
-      vhdl->set_body("");
-      vhdl->set_body("internal_NEXT_DATA_RC_VAL <=");
-      vhdl->set_body("\t'1' when");
-      // bypass
-      vhdl->set_body("\t\t-- check bypass");
+	  vhdl->set_body(2,"((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RB=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) or");
+	}
+      vhdl->set_body(2,"false else");
+      vhdl->set_body(1,"internal_DATA_RB_VAL or (internal_READ_RB_VAL and in_GPR_READ_1_ACK and in_GPR_READ_1_DATA_VAL);");
+    }
+    {
+      vhdl->set_body(0,"");
+      vhdl->set_body(0,"internal_NEXT_DATA_RC_VAL <=");
+      vhdl->set_body(1,"'1' when");
+      // bypass
+      vhdl->set_body(2,"-- check bypass");
       for (int32_t i=_param->_nb_spr_write-1; i>=0 ; i--)
 	{
@@ -325,20 +325,20 @@
 	    cmp = "";
 	  
-	  vhdl->set_body("\t\t((in_SPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RC=in_SPR_WRITE_"+toString(i)+"_NUM_REG)) or");
-	}
-      vhdl->set_body("\t\tfalse else");
-      vhdl->set_body("\tinternal_DATA_RC_VAL or (internal_READ_RC_VAL and in_SPR_READ_0_ACK and in_SPR_READ_0_DATA_VAL);");
-    }
-    
-    vhdl->set_body("");
-    vhdl->set_body("-- data_rx - data read");
-    {
-      vhdl->set_body("");
-      vhdl->set_body("internal_NEXT_DATA_RA <=");
+	  vhdl->set_body(2,"((in_SPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RC=in_SPR_WRITE_"+toString(i)+"_NUM_REG)) or");
+	}
+      vhdl->set_body(2,"false else");
+      vhdl->set_body(1,"internal_DATA_RC_VAL or (internal_READ_RC_VAL and in_SPR_READ_0_ACK and in_SPR_READ_0_DATA_VAL);");
+    }
+    
+    vhdl->set_body(0,"");
+    vhdl->set_body(0,"-- data_rx - data read");
+    {
+      vhdl->set_body(0,"");
+      vhdl->set_body(0,"internal_NEXT_DATA_RA <=");
 #ifdef SYSTEMC_VHDL_COMPATIBILITY
-      vhdl->set_body("\t"+std_logic_others(_param->_size_general_data,0)+" when internal_READ_RA='0' else");
+      vhdl->set_body(1,""+std_logic_others(_param->_size_general_data,0)+" when internal_READ_RA='0' else");
 #endif
       // bypass
-      vhdl->set_body("\t\t-- check bypass");
+      vhdl->set_body(2,"-- check bypass");
       for (int32_t i=_param->_nb_gpr_write-1; i>=0 ; i--)
 	{
@@ -350,17 +350,17 @@
 	    cmp = "";
 	  
-	  vhdl->set_body("\tin_GPR_WRITE_"+toString(i)+"_DATA when ((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RA=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) else");
-	}
-      vhdl->set_body("\treg_DATA_RA when (internal_DATA_RA_VAL='1') else");
-      vhdl->set_body("\tin_GPR_READ_0_DATA;");
-    }
-    {
-      vhdl->set_body("");
-      vhdl->set_body("internal_NEXT_DATA_RB <=");
+	  vhdl->set_body(1,"in_GPR_WRITE_"+toString(i)+"_DATA when ((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RA=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) else");
+	}
+      vhdl->set_body(1,"reg_DATA_RA when (internal_DATA_RA_VAL='1') else");
+      vhdl->set_body(1,"in_GPR_READ_0_DATA;");
+    }
+    {
+      vhdl->set_body(0,"");
+      vhdl->set_body(0,"internal_NEXT_DATA_RB <=");
 #ifdef SYSTEMC_VHDL_COMPATIBILITY
-      vhdl->set_body("\t"+std_logic_others(_param->_size_general_data,0)+" when internal_READ_RB='0' else");
+      vhdl->set_body(1,""+std_logic_others(_param->_size_general_data,0)+" when internal_READ_RB='0' else");
 #endif
       // bypass
-      vhdl->set_body("\t\t-- check bypass");
+      vhdl->set_body(2,"-- check bypass");
       for (int32_t i=_param->_nb_gpr_write-1; i>=0 ; i--)
 	{
@@ -372,17 +372,17 @@
 	    cmp = "";
 	  
-	  vhdl->set_body("\tin_GPR_WRITE_"+toString(i)+"_DATA when ((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RB=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) else");
-	}
-      vhdl->set_body("\treg_DATA_RB when (internal_DATA_RB_VAL='1') else");
-      vhdl->set_body("\tin_GPR_READ_1_DATA;");
-    }
-    {
-      vhdl->set_body("");
-      vhdl->set_body("internal_NEXT_DATA_RC <=");
+	  vhdl->set_body(1,"in_GPR_WRITE_"+toString(i)+"_DATA when ((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RB=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) else");
+	}
+      vhdl->set_body(1,"reg_DATA_RB when (internal_DATA_RB_VAL='1') else");
+      vhdl->set_body(1,"in_GPR_READ_1_DATA;");
+    }
+    {
+      vhdl->set_body(0,"");
+      vhdl->set_body(0,"internal_NEXT_DATA_RC <=");
 #ifdef SYSTEMC_VHDL_COMPATIBILITY
-      vhdl->set_body("\t"+std_logic_others(_param->_size_special_data,0)+" when internal_READ_RC='0' else");
+      vhdl->set_body(1,""+std_logic_others(_param->_size_special_data,0)+" when internal_READ_RC='0' else");
 #endif
       // bypass
-      vhdl->set_body("\t\t-- check bypass");
+      vhdl->set_body(2,"-- check bypass");
       for (int32_t i=_param->_nb_spr_write-1; i>=0 ; i--)
 	{
@@ -394,50 +394,50 @@
 	    cmp = "";
 	  
-	  vhdl->set_body("\tin_SPR_WRITE_"+toString(i)+"_DATA when ((in_SPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (in_SPR_WRITE_"+toString(i)+"_NUM_REG=internal_NUM_REG_RC)) else");
-	}
-      vhdl->set_body("\treg_DATA_RC when (internal_DATA_RC_VAL='1') else");
-      vhdl->set_body("\tin_SPR_READ_0_DATA;");
-
-    vhdl->set_body("");
-    vhdl->set_body("-----------------------------------");
-    vhdl->set_body("-- transition");
-    vhdl->set_body("-----------------------------------");
-    vhdl->set_body("");
-    vhdl->set_body("-- need a new head if :");
-    vhdl->set_body("--   * queue is empty");
-    vhdl->set_body("--   * pop with queue");
-    vhdl->set_body ("internal_NEXT_NEED_NEW_HEAD <= not internal_QUEUE_RETIRE_VAL or (internal_QUEUE_RETIRE_VAL and internal_QUEUE_RETIRE_ACK);");
-
-    vhdl->set_body ("internal_READ_RA_VAL   <=     internal_READ_RA when reg_NEED_NEW_HEAD='1' else reg_READ_RA_VAL;");
-    vhdl->set_body ("internal_READ_RB_VAL   <=     internal_READ_RB when reg_NEED_NEW_HEAD='1' else reg_READ_RB_VAL;");
-    vhdl->set_body ("internal_READ_RC_VAL   <=     internal_READ_RC when reg_NEED_NEW_HEAD='1' else reg_READ_RC_VAL;");
-    vhdl->set_body ("internal_DATA_RA_VAL   <= not internal_READ_RA when reg_NEED_NEW_HEAD='1' else reg_DATA_RA_VAL;");
-    vhdl->set_body ("internal_DATA_RB_VAL   <= not internal_READ_RB when reg_NEED_NEW_HEAD='1' else reg_DATA_RB_VAL;");
-    vhdl->set_body ("internal_DATA_RC_VAL   <= not internal_READ_RC when reg_NEED_NEW_HEAD='1' else reg_DATA_RC_VAL;");
-
-
-    vhdl->set_body ("");
-    vhdl->set_body ("transition: process (in_CLOCK)");
-    vhdl->set_body ("begin  -- process transition");
-    vhdl->set_body ("\tif in_CLOCK'event and in_CLOCK = '1' then");
-    vhdl->set_body ("");
-    vhdl->set_body ("\t\tif (in_NRESET = '0') then");    
-    vhdl->set_body ("\t\t\treg_NEED_NEW_HEAD <= '1';");
-    vhdl->set_body ("\t\telse");
-    vhdl->set_body ("\t\t\treg_NEED_NEW_HEAD <= internal_NEXT_NEED_NEW_HEAD;");
-    vhdl->set_body ("\t\t\treg_READ_RA_VAL   <= internal_NEXT_READ_RA_VAL;");
-    vhdl->set_body ("\t\t\treg_READ_RB_VAL   <= internal_NEXT_READ_RB_VAL;");
-    vhdl->set_body ("\t\t\treg_READ_RC_VAL   <= internal_NEXT_READ_RC_VAL;");
-    vhdl->set_body ("\t\t\treg_DATA_RA_VAL   <= internal_NEXT_DATA_RA_VAL;");
-    vhdl->set_body ("\t\t\treg_DATA_RB_VAL   <= internal_NEXT_DATA_RB_VAL;");
-    vhdl->set_body ("\t\t\treg_DATA_RC_VAL   <= internal_NEXT_DATA_RC_VAL;");
-    vhdl->set_body ("\t\t\treg_DATA_RA       <= internal_NEXT_DATA_RA    ;");
-    vhdl->set_body ("\t\t\treg_DATA_RB       <= internal_NEXT_DATA_RB    ;");
-    vhdl->set_body ("\t\t\treg_DATA_RC       <= internal_NEXT_DATA_RC    ;");
-
-    vhdl->set_body ("\t\tend if;");
-    vhdl->set_body ("");
-    vhdl->set_body ("\tend if;");
-    vhdl->set_body ("end process transition;");
+	  vhdl->set_body(1,"in_SPR_WRITE_"+toString(i)+"_DATA when ((in_SPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (in_SPR_WRITE_"+toString(i)+"_NUM_REG=internal_NUM_REG_RC)) else");
+	}
+      vhdl->set_body(1,"reg_DATA_RC when (internal_DATA_RC_VAL='1') else");
+      vhdl->set_body(1,"in_SPR_READ_0_DATA;");
+
+    vhdl->set_body(0,"");
+    vhdl->set_body(0,"-----------------------------------");
+    vhdl->set_body(0,"-- transition");
+    vhdl->set_body(0,"-----------------------------------");
+    vhdl->set_body(0,"");
+    vhdl->set_body(0,"-- need a new head if :");
+    vhdl->set_body(0,"--   * queue is empty");
+    vhdl->set_body(0,"--   * pop with queue");
+    vhdl->set_body(0,"internal_NEXT_NEED_NEW_HEAD <= not internal_QUEUE_RETIRE_VAL or (internal_QUEUE_RETIRE_VAL and internal_QUEUE_RETIRE_ACK);");
+
+    vhdl->set_body(0,"internal_READ_RA_VAL   <=     internal_READ_RA when reg_NEED_NEW_HEAD='1' else reg_READ_RA_VAL;");
+    vhdl->set_body(0,"internal_READ_RB_VAL   <=     internal_READ_RB when reg_NEED_NEW_HEAD='1' else reg_READ_RB_VAL;");
+    vhdl->set_body(0,"internal_READ_RC_VAL   <=     internal_READ_RC when reg_NEED_NEW_HEAD='1' else reg_READ_RC_VAL;");
+    vhdl->set_body(0,"internal_DATA_RA_VAL   <= not internal_READ_RA when reg_NEED_NEW_HEAD='1' else reg_DATA_RA_VAL;");
+    vhdl->set_body(0,"internal_DATA_RB_VAL   <= not internal_READ_RB when reg_NEED_NEW_HEAD='1' else reg_DATA_RB_VAL;");
+    vhdl->set_body(0,"internal_DATA_RC_VAL   <= not internal_READ_RC when reg_NEED_NEW_HEAD='1' else reg_DATA_RC_VAL;");
+
+
+    vhdl->set_body(0,"");
+    vhdl->set_body(0,"transition: process (in_CLOCK)");
+    vhdl->set_body(0,"begin  -- process transition");
+    vhdl->set_body(1,"if in_CLOCK'event and in_CLOCK = '1' then");
+    vhdl->set_body(0,"");
+    vhdl->set_body(2,"if (in_NRESET = '0') then");    
+    vhdl->set_body(3,"reg_NEED_NEW_HEAD <= '1';");
+    vhdl->set_body(2,"else");
+    vhdl->set_body(3,"reg_NEED_NEW_HEAD <= internal_NEXT_NEED_NEW_HEAD;");
+    vhdl->set_body(3,"reg_READ_RA_VAL   <= internal_NEXT_READ_RA_VAL;");
+    vhdl->set_body(3,"reg_READ_RB_VAL   <= internal_NEXT_READ_RB_VAL;");
+    vhdl->set_body(3,"reg_READ_RC_VAL   <= internal_NEXT_READ_RC_VAL;");
+    vhdl->set_body(3,"reg_DATA_RA_VAL   <= internal_NEXT_DATA_RA_VAL;");
+    vhdl->set_body(3,"reg_DATA_RB_VAL   <= internal_NEXT_DATA_RB_VAL;");
+    vhdl->set_body(3,"reg_DATA_RC_VAL   <= internal_NEXT_DATA_RC_VAL;");
+    vhdl->set_body(3,"reg_DATA_RA       <= internal_NEXT_DATA_RA    ;");
+    vhdl->set_body(3,"reg_DATA_RB       <= internal_NEXT_DATA_RB    ;");
+    vhdl->set_body(3,"reg_DATA_RC       <= internal_NEXT_DATA_RC    ;");
+
+    vhdl->set_body(2,"end if;");
+    vhdl->set_body(0,"");
+    vhdl->set_body(1,"end if;");
+    vhdl->set_body(0,"end process transition;");
 
     }
