Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/SelfTest/src/test.cpp	(revision 82)
@@ -7,9 +7,10 @@
  */
 
+#define NB_ITERATION 64
+#define CYCLE_MAX    (1024*NB_ITERATION)
+
 #include "Behavioural/Generic/Shifter/SelfTest/include/test.h"
 #include "Common/include/BitManipulation.h"
 #include "Common/include/Test.h"
-
-#define NB_ITERATION 64
 
 void test (string name,
@@ -41,5 +42,6 @@
 				    param_stat,
 #endif
-				    param);
+				    &param,
+				    USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/include/Parameters.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/include/Parameters.h	(revision 82)
@@ -59,8 +59,8 @@
   public : ~Parameters () ;
 
-  public :        std::string   msg_error  (void);
-  public :        std::string   print      (uint32_t depth);
-  public : friend std::ostream& operator<< (std::ostream& output_stream,
-					    morpheo::behavioural::generic::shifter::Parameters & x);
+  public :        Parameters_test msg_error  (void);
+  public :        std::string     print      (uint32_t depth);
+  public : friend std::ostream&   operator<< (std::ostream& output_stream,
+					      morpheo::behavioural::generic::shifter::Parameters & x);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/include/Shifter.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/include/Shifter.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/include/Shifter.h	(revision 82)
@@ -25,4 +25,5 @@
 #endif
 #include "Behavioural/include/Component.h"
+#include "Behavioural/include/Usage.h"
 
 namespace morpheo                    {
@@ -39,7 +40,8 @@
     // -----[ fields ]----------------------------------------------------
     // Parameters
-  protected : const std::string     _name;
+  protected : const std::string  _name;
+  protected : const Parameters * _param;
+  private   : const Tusage_t     _usage;
 
-  protected : const Parameters _param;
 #ifdef STATISTICS
   public    : Stat                           * _stat;
@@ -84,5 +86,7 @@
 					   morpheo::behavioural::Parameters_Statistics * param_statistics,
 #endif
-					   Parameters                                    param );
+					   Parameters                                  * param,
+					   morpheo::behavioural::Tusage_t                usage
+					   );
     
   public  :          Shifter              (Parameters param );
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Parameters_msg_error.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Parameters_msg_error.cpp	(revision 82)
@@ -15,41 +15,24 @@
 namespace shifter {
 
-  std::string Parameters::msg_error(void)
+  Parameters_test Parameters::msg_error(void)
   {
-    std::string msg = "";
+    Parameters_test test ("Shifter");
 
     if (_size_data < 2)
-      {
-        msg += "  - size_data must be > 1\n";
-        msg += "    * size_data                       : " + toString(_size_data) + "\n";
-      }
-
+      test.error("size_data must be > 1\n");
+    
     if (is_positive(_nb_port) == false)
-      {
-        msg += "  - nb_port must be > 0\n";
-        msg += "    * nb_port                         : " + toString(_nb_port) + "\n";
-      }
-
+      test.error("nb_port must be > 0\n");
+    
     if (_shift_value > _size_data) 
-      {
-	msg += "  - shift_value must be < size_data\n";	
-        msg += "    * shift_value                     : " + toString(_shift_value) + "\n";
-        msg += "    * size_data                       : " + toString(_size_data)   + "\n";
-      }    
-
+      test.error("shift_value must be < size_data\n");	
+    
     if ( (_rotate == internal_rotate) && (_carry != internal_logic))
-      {
-	msg += "  - Incompatible parameters : internal_rotate have never carry (must be set at \"internal_logic\"\n";
-        msg += "    * rotate                          : " + toString(_rotate) + "\n";
-        msg += "    * carry                           : " + toString(_carry ) + "\n";
-      }    
-
+      test.error("Incompatible parameters : internal_rotate have never carry (must be set at \"internal_logic\"\n");
+    
     if (_type_completion_bool && (_size_data_completion != 1))
-      {
-	msg += "  - Incompatible parameters : you can't have the type of port in_SHIFTER_COMPLETION at bool. Because, This port must be more bits\n";
-	msg += "    * size_data_completion            : " + toString (_size_data_completion) + "\n";
-      }
+      test.error("Incompatible parameters : you can't have the type of port in_SHIFTER_COMPLETION at bool. Because, This port must be more bits\n");
       
-    return msg;
+    return test;
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter.cpp	(revision 82)
@@ -14,15 +14,18 @@
 
 
+  Shifter::Shifter (
 #ifdef SYSTEMC
-  Shifter::Shifter (sc_module_name name
+		    sc_module_name name
 #else
-  Shifter::Shifter (string name
+		    std::string name
 #endif
 #ifdef STATISTICS
 		    ,morpheo::behavioural::Parameters_Statistics * param_statistics
 #endif
-		    ,morpheo::behavioural::generic::shifter::Parameters param ):
-		    _name   (name)
-		    ,_param (param)
+		    ,morpheo::behavioural::generic::shifter::Parameters *param
+		    ,morpheo::behavioural::Tusage_t                usage ):
+    _name   (name)
+    ,_param (param)
+    ,_usage (usage)
   {
 #ifdef SYSTEMC
@@ -50,17 +53,17 @@
     dont_initialize ();
     sensitive << (*(in_CLOCK)).neg();
-    for (uint32_t i=0; i<param._nb_port; i++)
+    for (uint32_t i=0; i<param->_nb_port; i++)
       {
 	sensitive << (*(in_SHIFTER_DATA      [i]));
-	if (param._shift_value == 0)
+	if (param->_shift_value == 0)
 	sensitive << (*(in_SHIFTER_SHIFT     [i]));
-	if (param._direction   == external_direction)
+	if (param->_direction   == external_direction)
 	sensitive << (*(in_SHIFTER_DIRECTION [i]));
-	if (_param._rotate     == external_rotate)
+	if (_param->_rotate     == external_rotate)
 	sensitive << (*(in_SHIFTER_TYPE      [i]));
-	if (param._carry       == external_carry)
+	if (param->_carry       == external_carry)
 	sensitive << (*(in_SHIFTER_CARRY     [i]));
-	if (param._carry       == external_completion)
-	  if (_param._type_completion_bool == true)
+	if (param->_carry       == external_completion)
+	  if (_param->_type_completion_bool == true)
 	    sensitive << (*(in_SHIFTER_CARRY_IN  [i]));
 	  else
@@ -70,17 +73,17 @@
 #ifdef SYSTEMCASS_SPECIFIC
     // List dependency information
-    for (uint32_t i=0; i<param._nb_port; i++)
+    for (uint32_t i=0; i<param->_nb_port; i++)
       {
 	(*(out_SHIFTER_DATA [i])) (*(in_SHIFTER_DATA      [i]));
-	if (param._shift_value == 0)
+	if (param->_shift_value == 0)
 	(*(out_SHIFTER_DATA [i])) (*(in_SHIFTER_SHIFT     [i]));
-	if (param._direction   == external_direction)
+	if (param->_direction   == external_direction)
 	(*(out_SHIFTER_DATA [i])) (*(in_SHIFTER_DIRECTION [i]));
-	if (_param._rotate     == external_rotate)
+	if (_param->_rotate     == external_rotate)
 	(*(out_SHIFTER_DATA [i])) (*(in_SHIFTER_TYPE      [i]));
-	if (param._carry       == external_carry)
+	if (param->_carry       == external_carry)
 	(*(out_SHIFTER_DATA [i])) (*(in_SHIFTER_CARRY     [i]));
-	if (param._carry       == external_completion)
-	if (_param._type_completion_bool == true)
+	if (param->_carry       == external_completion)
+	if (_param->_type_completion_bool == true)
 	(*(out_SHIFTER_DATA [i])) (*(in_SHIFTER_CARRY_IN  [i]));
 	else
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_allocation.cpp	(revision 82)
@@ -17,5 +17,5 @@
   void Shifter::allocation (void)
   {
-    _component   = new Component ();
+    _component   = new Component (_usage);
 
     Entity * entity = _component->set_entity (_name       
@@ -45,21 +45,21 @@
     {
       // Interface "shifter"
-       in_SHIFTER_DATA      = new SC_IN (Tdata_t)      * [_param._nb_port];
-      if (_param._shift_value == 0)
-       in_SHIFTER_SHIFT     = new SC_IN (Tshift_t)     * [_param._nb_port];
-      if (_param._direction   == external_direction)
-       in_SHIFTER_DIRECTION = new SC_IN (Tdirection_t) * [_param._nb_port];
-      if (_param._rotate      == external_rotate)
-       in_SHIFTER_TYPE      = new SC_IN (Ttype_t)      * [_param._nb_port];
-      if (_param._carry       == external_carry)
-       in_SHIFTER_CARRY     = new SC_IN (Tcarry_t)     * [_param._nb_port];
-      if (_param._carry       == external_completion)
-      if (_param._type_completion_bool == true)
-       in_SHIFTER_CARRY_IN  = new SC_IN (Tcontrol_t)   * [_param._nb_port];
+       in_SHIFTER_DATA      = new SC_IN (Tdata_t)      * [_param->_nb_port];
+      if (_param->_shift_value == 0)
+       in_SHIFTER_SHIFT     = new SC_IN (Tshift_t)     * [_param->_nb_port];
+      if (_param->_direction   == external_direction)
+       in_SHIFTER_DIRECTION = new SC_IN (Tdirection_t) * [_param->_nb_port];
+      if (_param->_rotate      == external_rotate)
+       in_SHIFTER_TYPE      = new SC_IN (Ttype_t)      * [_param->_nb_port];
+      if (_param->_carry       == external_carry)
+       in_SHIFTER_CARRY     = new SC_IN (Tcarry_t)     * [_param->_nb_port];
+      if (_param->_carry       == external_completion)
+      if (_param->_type_completion_bool == true)
+       in_SHIFTER_CARRY_IN  = new SC_IN (Tcontrol_t)   * [_param->_nb_port];
       else
-       in_SHIFTER_COMPLETION= new SC_IN (Tdata_t)      * [_param._nb_port];
-      out_SHIFTER_DATA      = new SC_OUT(Tdata_t)      * [_param._nb_port];
+       in_SHIFTER_COMPLETION= new SC_IN (Tdata_t)      * [_param->_nb_port];
+      out_SHIFTER_DATA      = new SC_OUT(Tdata_t)      * [_param->_nb_port];
       
-      for (uint32_t i=0; i<_param._nb_port; i++)
+      for (uint32_t i=0; i<_param->_nb_port; i++)
 	{
 	  Interface_fifo * interface = _interfaces->set_interface("shifter_"+toString(i)
@@ -71,19 +71,19 @@
 								  );
 	 
-	   in_SHIFTER_DATA       [i] = interface->set_signal_in  <Tdata_t     > ("data"      ,_param._size_data);
-	  if (_param._shift_value == 0)
-	   in_SHIFTER_SHIFT      [i] = interface->set_signal_in  <Tshift_t    > ("shift"     ,static_cast<uint32_t>(ceil(log2(_param._size_data))));
-	  if (_param._direction == external_direction)
+	   in_SHIFTER_DATA       [i] = interface->set_signal_in  <Tdata_t     > ("data"      ,_param->_size_data);
+	  if (_param->_shift_value == 0)
+	   in_SHIFTER_SHIFT      [i] = interface->set_signal_in  <Tshift_t    > ("shift"     ,static_cast<uint32_t>(ceil(log2(_param->_size_data))));
+	  if (_param->_direction == external_direction)
 	   in_SHIFTER_DIRECTION  [i] = interface->set_signal_in  <Tdirection_t> ("direction" ,1);
-	  if (_param._rotate  == external_rotate)
+	  if (_param->_rotate  == external_rotate)
 	   in_SHIFTER_TYPE       [i] = interface->set_signal_in  <Ttype_t     > ("type"      ,1);
-	  if (_param._carry == external_carry)
+	  if (_param->_carry == external_carry)
 	   in_SHIFTER_CARRY      [i] = interface->set_signal_in  <Tcarry_t    > ("carry"     ,1);
-	  if (_param._carry       == external_completion)
-	  if (_param._type_completion_bool == true)
+	  if (_param->_carry       == external_completion)
+	  if (_param->_type_completion_bool == true)
 	   in_SHIFTER_CARRY_IN   [i] = interface->set_signal_in  <Tcontrol_t  > ("carry_in"  ,1);
 	  else
-	   in_SHIFTER_COMPLETION [i] = interface->set_signal_in  <Tdata_t     > ("completion",_param._size_data_completion);
-	  out_SHIFTER_DATA       [i] = interface->set_signal_out <Tdata_t     > ("data"      ,_param._size_data);
+	   in_SHIFTER_COMPLETION [i] = interface->set_signal_in  <Tdata_t     > ("completion",_param->_size_data_completion);
+	  out_SHIFTER_DATA       [i] = interface->set_signal_out <Tdata_t     > ("data"      ,_param->_size_data);
 	}										                                         
     }
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_deallocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_deallocation.cpp	(revision 82)
@@ -22,14 +22,14 @@
 
     delete []  in_SHIFTER_DATA      ;
-    if (_param._shift_value == 0)
+    if (_param->_shift_value == 0)
     delete []  in_SHIFTER_SHIFT     ;
-    if (_param._direction   == external_direction )
+    if (_param->_direction   == external_direction )
     delete []  in_SHIFTER_DIRECTION ;
-    if (_param._rotate      == external_rotate    )
+    if (_param->_rotate      == external_rotate    )
     delete []  in_SHIFTER_TYPE      ;
-    if (_param._carry       == external_carry     )
+    if (_param->_carry       == external_carry     )
     delete []  in_SHIFTER_CARRY     ;
-    if (_param._carry       == external_completion)
-    if (_param._type_completion_bool == true)
+    if (_param->_carry       == external_completion)
+    if (_param->_type_completion_bool == true)
     delete []  in_SHIFTER_CARRY_IN  ;
     else
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_genMealy_shift.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_genMealy_shift.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_genMealy_shift.cpp	(revision 82)
@@ -18,40 +18,40 @@
   void Shifter::genMealy_shift (void)
   {
-    for (uint32_t i=0; i<_param._nb_port; i++)
+    for (uint32_t i=0; i<_param->_nb_port; i++)
       {
 	// Read
 	Tdata_t      data_in     = PORT_READ(in_SHIFTER_DATA [i]);
 	Tdata_t      data_out    = data_in;
-	Tshift_t     shift_value = _param._shift_value;
+	Tshift_t     shift_value = _param->_shift_value;
 	if (shift_value == 0)
 	  shift_value = PORT_READ(in_SHIFTER_SHIFT [i]);
 
  	Tdirection_t direction; 
- 	if (_param._direction == external_direction)
+ 	if (_param->_direction == external_direction)
 	  direction = PORT_READ(in_SHIFTER_DIRECTION [i]);
 	else
-	  direction = _param._internal_direction;
+	  direction = _param->_internal_direction;
 
 	Ttype_t      type;
-	if (_param._rotate    == external_rotate)
+	if (_param->_rotate    == external_rotate)
 	  type      = PORT_READ(in_SHIFTER_TYPE      [i]);
 	else
-	  type      = _param._internal_type; 
+	  type      = _param->_internal_type; 
 
 	Tcarry_t     carry;	
-	if (_param._carry     == external_carry)
+	if (_param->_carry     == external_carry)
 	  carry     = PORT_READ(in_SHIFTER_CARRY     [i]);
 	else
-	  carry     = _param._internal_carry; 
+	  carry     = _param->_internal_carry; 
 	
 	if (type == _shift)
 	  {
-	    data_out = shift  <Tdata_t> (_param._size_data, data_in, shift_value, direction == _left, carry == _arithmetic);
+	    data_out = shift  <Tdata_t> (_param->_size_data, data_in, shift_value, direction == _left, carry == _arithmetic);
 
-	    if (_param._size_data_completion > 0)
+	    if (_param->_size_data_completion > 0)
 	      {
 		Tdata_t completion;
 
-		if (_param._type_completion_bool == true)
+		if (_param->_type_completion_bool == true)
 		  completion = (PORT_READ(in_SHIFTER_CARRY_IN   [i])==true)?1:0;
 		else
@@ -66,5 +66,5 @@
 		else
 		  {
-		    mask       = gen_mask<Tdata_t> (shift_value)      << (_param._size_data-shift_value);
+		    mask       = gen_mask<Tdata_t> (shift_value)      << (_param->_size_data-shift_value);
 		  }
 		  
@@ -73,5 +73,5 @@
 	  }
 	else
-	  data_out = rotate <Tdata_t> (_param._size_data, data_in, shift_value, direction == _left);
+	  data_out = rotate <Tdata_t> (_param->_size_data, data_in, shift_value, direction == _left);
 
 	// Write
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl_body.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl_body.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl_body.cpp	(revision 82)
@@ -17,45 +17,45 @@
   void Shifter::vhdl_body (Vhdl * & vhdl)
   {
-    //uint32_t log2_size_data = static_cast<uint32_t>(ceil(log2(_param._size_data)));
+    //uint32_t log2_size_data = static_cast<uint32_t>(ceil(log2(_param->_size_data)));
 
     vhdl->set_body ("-- Compute all case of shift");
 
-    for (uint32_t i=0; i<_param._nb_port; i++)
+    for (uint32_t i=0; i<_param->_nb_port; i++)
       {
 	//-----[ Shift logic Left ]--------------------------------------------
-	if (_param._have_shift_logic_left)
+	if (_param->_have_shift_logic_left)
 	  vhdl->set_body ("shift_logic_left_"+toString(i)+"        <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_"+toString(i)+"_DATA) sll CONV_INTEGER(shift_"+toString(i)+"));");
 	//-----[ Shift logic Right ]-------------------------------------------
-	if (_param._have_shift_logic_right)
+	if (_param->_have_shift_logic_right)
 	  vhdl->set_body ("shift_logic_right_"+toString(i)+"       <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_"+toString(i)+"_DATA) srl CONV_INTEGER(shift_"+toString(i)+"));");
 	//-----[ Shift arithmetic Left ]---------------------------------------
-	if (_param._have_shift_arithmetic_left)
+	if (_param->_have_shift_arithmetic_left)
 	  vhdl->set_body ("shift_arithmetic_left_"+toString(i)+"   <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_"+toString(i)+"_DATA) sla CONV_INTEGER(shift_"+toString(i)+"));");
 	//-----[ Shift arithmetic Right ]--------------------------------------
-	if (_param._have_shift_arithmetic_right)
+	if (_param->_have_shift_arithmetic_right)
 	  vhdl->set_body ("shift_arithmetic_right_"+toString(i)+"  <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_"+toString(i)+"_DATA) sra CONV_INTEGER(shift_"+toString(i)+"));");
 	//-----[ Rotate Left ]-------------------------------------------------
-	if (_param._have_rotate_left)
+	if (_param->_have_rotate_left)
 	  vhdl->set_body ("rotate_left_"+toString(i)+"             <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_"+toString(i)+"_DATA) rol CONV_INTEGER(shift_"+toString(i)+"));");
 	//-----[ Rotate Right ]------------------------------------------------
-	if (_param._have_rotate_right)
+	if (_param->_have_rotate_right)
 	  vhdl->set_body ("rotate_right_"+toString(i)+"            <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_"+toString(i)+"_DATA) ror CONV_INTEGER(shift_"+toString(i)+"));");
       }
 
-    if (_param._size_data_completion > 0)
+    if (_param->_size_data_completion > 0)
       {
 	vhdl->set_body ("");
 	vhdl->set_body ("-- Mask");
 
-	for (uint32_t i=0; i<_param._nb_port; i++)
+	for (uint32_t i=0; i<_param->_nb_port; i++)
 	  {
 	    std::string print_shifter_completion;
 	    
-	    if (_param._type_completion_bool == true)
+	    if (_param->_type_completion_bool == true)
 	      print_shifter_completion = "in_SHIFTER_"+toString(i)+"_CARRY_IN";
 	    else
 	      print_shifter_completion = "in_SHIFTER_"+toString(i)+"_COMPLETION";
 
-	    if (_param._size_data == _param._size_data_completion)
+	    if (_param->_size_data == _param->_size_data_completion)
 	      {
 		vhdl->set_body ("shifter_completion_left_"+toString(i)+"  <= "+print_shifter_completion+";");
@@ -64,9 +64,9 @@
 	    else
 	      {
-		vhdl->set_body ("shifter_completion_left_"+toString(i)+std_logic_range(_param._size_data-1,_param._size_data_completion)+"  <= "+std_logic_others(_param._size_data-_param._size_data_completion,0)+";");
-		vhdl->set_body ("shifter_completion_left_"+toString(i)+std_logic_range(_param._size_data_completion                    )+"  <= "+print_shifter_completion+";");
-
-		vhdl->set_body ("shifter_completion_right_"+toString(i)+std_logic_range(_param._size_data-1,_param._size_data-_param._size_data_completion)+" <= "+print_shifter_completion+";");
-		vhdl->set_body ("shifter_completion_right_"+toString(i)+std_logic_range(_param._size_data-_param._size_data_completion                    )+" <= "+std_logic_others(_param._size_data-_param._size_data_completion,0)+";");
+		vhdl->set_body ("shifter_completion_left_"+toString(i)+std_logic_range(_param->_size_data-1,_param->_size_data_completion)+"  <= "+std_logic_others(_param->_size_data-_param->_size_data_completion,0)+";");
+		vhdl->set_body ("shifter_completion_left_"+toString(i)+std_logic_range(_param->_size_data_completion                    )+"  <= "+print_shifter_completion+";");
+
+		vhdl->set_body ("shifter_completion_right_"+toString(i)+std_logic_range(_param->_size_data-1,_param->_size_data-_param->_size_data_completion)+" <= "+print_shifter_completion+";");
+		vhdl->set_body ("shifter_completion_right_"+toString(i)+std_logic_range(_param->_size_data-_param->_size_data_completion                    )+" <= "+std_logic_others(_param->_size_data-_param->_size_data_completion,0)+";");
 	      }
 	    
@@ -80,5 +80,5 @@
     vhdl->set_body ("-- Multiplexor");
 
-    for (uint32_t i=0; i<_param._nb_port; i++)
+    for (uint32_t i=0; i<_param->_nb_port; i++)
       {
 	vhdl->set_body ("out_SHIFTER_"+toString(i)+"_DATA       <=");
@@ -86,11 +86,11 @@
 
 	//-----[ Shift arithmetic Left ]---------------------------------------
-	if (_param._have_shift_arithmetic_left)
-	  {
-	    bool   have_when  = false;
-	    std::string print_when = "";
-	    std::string print_and  = "";
-	    
-	    if (_param._direction   == external_direction)
+	if (_param->_have_shift_arithmetic_left)
+	  {
+	    bool   have_when  = false;
+	    std::string print_when = "";
+	    std::string print_and  = "";
+	    
+	    if (_param->_direction   == external_direction)
 	      {
 		have_when = true;
@@ -98,5 +98,5 @@
 		print_and = " and ";
 	      }
-	    if (_param._rotate      == external_rotate)
+	    if (_param->_rotate      == external_rotate)
 	      {
 		have_when = true;
@@ -104,5 +104,5 @@
 		print_and = " and ";
 	      }
-	    if (_param._carry       == external_carry)
+	    if (_param->_carry       == external_carry)
 	      {
 		have_when = true;
@@ -117,11 +117,11 @@
 	  }
 	//-----[ Shift arithmetic Right ]--------------------------------------
-	if (_param._have_shift_arithmetic_right)
-	  {
-	    bool   have_when  = false;
-	    std::string print_when = "";
-	    std::string print_and  = "";
-	    
-	    if (_param._direction   == external_direction)
+	if (_param->_have_shift_arithmetic_right)
+	  {
+	    bool   have_when  = false;
+	    std::string print_when = "";
+	    std::string print_and  = "";
+	    
+	    if (_param->_direction   == external_direction)
 	      {
 		have_when = true;
@@ -129,5 +129,5 @@
 		print_and = " and ";
 	      }
-	    if (_param._rotate      == external_rotate)
+	    if (_param->_rotate      == external_rotate)
 	      {
 		have_when = true;
@@ -135,5 +135,5 @@
 		print_and = " and ";
 	      }
-	    if (_param._carry       == external_carry)
+	    if (_param->_carry       == external_carry)
 	      {
 		have_when = true;
@@ -148,11 +148,11 @@
 	  }
 	//-----[ Shift logic Left ]--------------------------------------------
-	if (_param._have_shift_logic_left)
-	  {
-	    bool   have_when  = false;
-	    std::string print_when = "";
-	    std::string print_and  = "";
-	    
-	    if (_param._direction   == external_direction)
+	if (_param->_have_shift_logic_left)
+	  {
+	    bool   have_when  = false;
+	    std::string print_when = "";
+	    std::string print_and  = "";
+	    
+	    if (_param->_direction   == external_direction)
 	      {
 		have_when = true;
@@ -160,5 +160,5 @@
 		print_and = " and ";
 	      }
-	    if (_param._rotate      == external_rotate)
+	    if (_param->_rotate      == external_rotate)
 	      {
 		have_when = true;
@@ -166,5 +166,5 @@
 		print_and = " and ";
 	      }
-	    if (_param._carry       == external_carry)
+	    if (_param->_carry       == external_carry)
 	      {
 		have_when = true;
@@ -177,5 +177,5 @@
 	    std::string print_expr_completion;
 
-	    if (_param._size_data_completion == 0)
+	    if (_param->_size_data_completion == 0)
 	      print_expr_completion = "shift_logic_left_"+toString(i)+" ";
 	    else
@@ -186,11 +186,11 @@
 	  }
 	//-----[ Shift logic Right ]-------------------------------------------
-	if (_param._have_shift_logic_right)
-	  {
-	    bool   have_when  = false;
-	    std::string print_when = "";
-	    std::string print_and  = "";
-	    
-	    if (_param._direction   == external_direction)
+	if (_param->_have_shift_logic_right)
+	  {
+	    bool   have_when  = false;
+	    std::string print_when = "";
+	    std::string print_and  = "";
+	    
+	    if (_param->_direction   == external_direction)
 	      {
 		have_when = true;
@@ -198,5 +198,5 @@
 		print_and = " and ";
 	      }
-	    if (_param._rotate      == external_rotate)
+	    if (_param->_rotate      == external_rotate)
 	      {
 		have_when = true;
@@ -204,5 +204,5 @@
 		print_and = " and ";
 	      }
-	    if (_param._carry       == external_carry)
+	    if (_param->_carry       == external_carry)
 	      {
 		have_when = true;
@@ -215,5 +215,5 @@
 	    std::string print_expr_completion;
 
-	    if (_param._size_data_completion == 0)
+	    if (_param->_size_data_completion == 0)
 	      print_expr_completion = "shift_logic_right_"+toString(i);
 	    else
@@ -224,11 +224,11 @@
 	  }
 	//-----[ Rotate Left ]-------------------------------------------------
-	if (_param._have_rotate_left)
-	  {
-	    bool   have_when  = false;
-	    std::string print_when = "";
-	    std::string print_and  = "";
-	    
-	    if (_param._direction   == external_direction)
+	if (_param->_have_rotate_left)
+	  {
+	    bool   have_when  = false;
+	    std::string print_when = "";
+	    std::string print_and  = "";
+	    
+	    if (_param->_direction   == external_direction)
 	      {
 		have_when = true;
@@ -236,5 +236,5 @@
 		print_and = " and ";
 	      }
-	    if (_param._rotate      == external_rotate)
+	    if (_param->_rotate      == external_rotate)
 	      {
 		have_when = true;
@@ -250,11 +250,11 @@
 	  }
 	//-----[ Rotate Right ]------------------------------------------------
-	if (_param._have_rotate_right)
-	  {
-	    bool   have_when  = false;
-	    std::string print_when = "";
-	    std::string print_and  = "";
-	    
-	    if (_param._direction   == external_direction)
+	if (_param->_have_rotate_right)
+	  {
+	    bool   have_when  = false;
+	    std::string print_when = "";
+	    std::string print_and  = "";
+	    
+	    if (_param->_direction   == external_direction)
 	      {
 		have_when = true;
@@ -262,5 +262,5 @@
 		print_and = " and ";
 	      }
-	    if (_param._rotate      == external_rotate)
+	    if (_param->_rotate      == external_rotate)
 	      {
 		have_when = true;
@@ -281,5 +281,5 @@
   /*
   //-----[ Shift logic Left ]--------------------------------------------
-  if (_param._have_shift_logic_left)
+  if (_param->_have_shift_logic_left)
     {
 
@@ -287,5 +287,5 @@
 
   //-----[ Shift logic Right ]-------------------------------------------
-  if (_param._have_shift_logic_right)
+  if (_param->_have_shift_logic_right)
     {
       
@@ -293,5 +293,5 @@
 
   //-----[ Shift arithmetic Left ]---------------------------------------
-  if (_param._have_shift_arithmetic_left)
+  if (_param->_have_shift_arithmetic_left)
     {
 
@@ -299,5 +299,5 @@
 
   //-----[ Shift arithmetic Right ]--------------------------------------
-  if (_param._have_shift_arithmetic_right)
+  if (_param->_have_shift_arithmetic_right)
     {
       
@@ -305,5 +305,5 @@
   
   //-----[ Rotate Left ]-------------------------------------------------
-  if (_param._have_rotate_left)
+  if (_param->_have_rotate_left)
     {
       
@@ -311,5 +311,5 @@
   
   //-----[ Rotate Right ]------------------------------------------------
-  if (_param._have_rotate_right)
+  if (_param->_have_rotate_right)
     {
       
