Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter.cpp	(revision 2)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter.cpp	(revision 42)
@@ -15,15 +15,19 @@
 
 #ifdef SYSTEMC
-  Shifter::Shifter (sc_module_name name,
+  Shifter::Shifter (sc_module_name name
 #else
-  Shifter::Shifter (string name,
+  Shifter::Shifter (string name
 #endif
 #ifdef STATISTICS
-		    morpheo::behavioural::Parameters_Statistics             param_statistics,
+		    ,morpheo::behavioural::Parameters_Statistics             param_statistics
 #endif
-		    morpheo::behavioural::generic::shifter::Parameters param ):
+		    ,morpheo::behavioural::generic::shifter::Parameters param ):
 		    _name   (name)
 		    ,_param (param)
   {
+#ifdef SYSTEMC
+    allocation ();
+#endif
+
 #ifdef STATISTICS
     // Allocation of statistics
@@ -31,13 +35,4 @@
 			    param_statistics          ,
 			    param);
-#endif
-
-#ifdef VHDL_TESTBENCH
-    // Creation of a testbench
-    //  -> port
-    //  -> clock's signals
-    _vhdl_testbench = new Vhdl_Testbench (_name);
-    vhdl_testbench_port           (*_vhdl_testbench);
-    _vhdl_testbench->set_clock    ("in_CLOCK",false);
 #endif
 
@@ -48,6 +43,4 @@
 
 #ifdef SYSTEMC
-    allocation ();
-
 #if (defined(STATISTICS) || defined (VHDL_TESTBENCH))
     SC_METHOD (transition);
@@ -107,10 +100,4 @@
 #endif
 
-#ifdef VHDL_TESTBENCH
-    // generate the test bench
-    _vhdl_testbench->generate_file();
-    delete _vhdl_testbench;
-#endif
-
 #ifdef STATISTICS
     _stat->generate_file(statistics(0));
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 2)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_allocation.cpp	(revision 42)
@@ -17,69 +17,82 @@
   void Shifter::allocation (void)
   {
-    string rename;
+    _component   = new Component ();
+
+    Entity * entity = _component->set_entity (_name       
+					     ,"Shifter"   
+#ifdef POSITION
+					     ,COMBINATORY 
+#endif
+					     );
+    
+    _interfaces = entity->set_interfaces();
 
 #if (defined(STATISTICS) || defined (VHDL_TESTBENCH))
-     in_CLOCK           = new SC_CLOCK ("SC_CLOCK");
+    {
+      Interface_fifo * interface = _interfaces->set_interface(""
+#ifdef POSITION
+							      , IN  
+							      , SOUTH
+							      , "Generalist interface"
 #endif
-    // 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];
-    else
-     in_SHIFTER_COMPLETION= new SC_IN (Tdata_t)      * [_param._nb_port];
-    out_SHIFTER_DATA      = new SC_OUT(Tdata_t)      * [_param._nb_port];
+							      );
+      
+       in_CLOCK        = interface->set_signal_clk              ("clock" ,1, CLOCK_VHDL_NO);
+       in_NRESET       = interface->set_signal_in <Tcontrol_t>  ("nreset",1, RESET_VHDL_NO);
+    }
+#endif
     
-    for (uint32_t i=0; i<_param._nb_port; i++)
-      {
-	rename = "in_SHIFTER_DATA["      + toString(i) + "]";
-	 in_SHIFTER_DATA      [i] = new SC_IN (Tdata_t)      (rename.c_str());
+    {
+      // 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];
+      else
+       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++)
+	{
+	  Interface_fifo * interface = _interfaces->set_interface("shifter_"+toString(i)
+#ifdef POSITION
+								  , IN  
+								  , SOUTH
+								  , "Generalist interface"
+#endif
+								  );
+	 
+	   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)
+	   in_SHIFTER_TYPE       [i] = interface->set_signal_in  <Ttype_t     > ("type"      ,1);
+	  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)
+	   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);
+	}										                                         
+    }
 
-	if (_param._shift_value == 0)
-	  {
-	rename = "in_SHIFTER_SHIFT["     + toString(i) + "]";
-	 in_SHIFTER_SHIFT     [i] = new SC_IN (Tshift_t)     (rename.c_str());
-	  }
-	if (_param._direction == external_direction)
-	  {
-	rename = "in_SHIFTER_DIRECTION[" + toString(i) + "]";
-	 in_SHIFTER_DIRECTION [i] = new SC_IN (Tdirection_t) (rename.c_str());
-	  }
-	if (_param._rotate  == external_rotate)
-	  {
-	rename = "in_SHIFTER_TYPE["      + toString(i) + "]";
-	 in_SHIFTER_TYPE     [i]      = new SC_IN (Ttype_t)  (rename.c_str());
-	  }
-	if (_param._carry == external_carry)
-	  {
-	rename = "in_SHIFTER_CARRY["    + toString(i) + "]";
-	 in_SHIFTER_CARRY    [i] = new SC_IN (Tcarry_t)      (rename.c_str());
-	  }
+#ifdef POSITION
+    _component->generate_file();
+#endif
 
-	if (_param._carry       == external_completion)
-	if (_param._type_completion_bool == true)
-	  {
-	 rename = "in_SHIFTER_CARRY_IN["      + toString(i) + "]";
-	 in_SHIFTER_CARRY_IN   [i] = new SC_IN (Tcontrol_t)  (rename.c_str());	  
-	  }
-	else
-	  {
-	 rename = "in_SHIFTER_COMPLETION["    + toString(i) + "]";
-	 in_SHIFTER_COMPLETION [i] = new SC_IN (Tdata_t)     (rename.c_str());
-	  }
-	
-	rename = "out_SHIFTER_DATA["    + toString(i) + "]";
-	out_SHIFTER_DATA     [i] = new SC_OUT(Tdata_t)       (rename.c_str());
-      }
   };
-
+  
 }; // end namespace shifter
 }; // end namespace generic
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 2)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_deallocation.cpp	(revision 42)
@@ -18,42 +18,25 @@
   {
 #if (defined(STATISTICS) || defined (VHDL_TESTBENCH))
-    delete in_CLOCK;
+    delete     in_CLOCK;
 #endif
 
-    // Interface "shifter"
-    for (uint32_t i=0; i<_param._nb_port; i++)
-      {
-	delete  in_SHIFTER_DATA      [i];
-	if (_param._shift_value == 0)
-	delete  in_SHIFTER_SHIFT     [i];
-	if (_param._direction   == external_direction)
-	delete  in_SHIFTER_DIRECTION [i];
-	if (_param._rotate      == external_rotate)
-	delete  in_SHIFTER_TYPE      [i];
-	if (_param._carry       == external_carry)
-	delete  in_SHIFTER_CARRY     [i];
-	if (_param._carry       == external_completion)
-	if (_param._type_completion_bool == true)
-	delete  in_SHIFTER_CARRY_IN  [i];	  
-	else
-	delete  in_SHIFTER_COMPLETION[i];
-	delete out_SHIFTER_DATA      [i];
-      }
+    delete []  in_SHIFTER_DATA      ;
+    if (_param._shift_value == 0)
+    delete []  in_SHIFTER_SHIFT     ;
+    if (_param._direction   == external_direction )
+    delete []  in_SHIFTER_DIRECTION ;
+    if (_param._rotate      == external_rotate    )
+    delete []  in_SHIFTER_TYPE      ;
+    if (_param._carry       == external_carry     )
+    delete []  in_SHIFTER_CARRY     ;
+    if (_param._carry       == external_completion)
+    if (_param._type_completion_bool == true)
+    delete []  in_SHIFTER_CARRY_IN  ;
+    else
+    delete []  in_SHIFTER_COMPLETION;
+    delete [] out_SHIFTER_DATA      ;
 
-    delete  in_SHIFTER_DATA      ;
-    if (_param._shift_value == 0)
-    delete  in_SHIFTER_SHIFT     ;
-    if (_param._direction   == external_direction )
-    delete  in_SHIFTER_DIRECTION ;
-    if (_param._rotate      == external_rotate    )
-    delete  in_SHIFTER_TYPE      ;
-    if (_param._carry       == external_carry     )
-    delete  in_SHIFTER_CARRY     ;
-    if (_param._carry       == external_completion)
-      if (_param._type_completion_bool == true)
-	delete  in_SHIFTER_CARRY_IN  ;
-      else
-	delete  in_SHIFTER_COMPLETION;
-    delete out_SHIFTER_DATA      ;
+    delete _component;
+
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_transition.cpp	(revision 2)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_transition.cpp	(revision 42)
@@ -23,5 +23,5 @@
 
 #ifdef VHDL_TESTBENCH
-    vhdl_testbench_transition (*_vhdl_testbench);
+    vhdl_testbench_transition ();
 #endif
   };
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl.cpp	(revision 2)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl.cpp	(revision 42)
@@ -18,7 +18,7 @@
   void Shifter::vhdl (void)
   {
-    Vhdl vhdl (_name);
+    Vhdl * vhdl = new Vhdl (_name);
 
-    vhdl.set_library_work (_name + "_Pack");
+    vhdl->set_library_work (_name + "_Pack");
 
     vhdl_port        (vhdl);
@@ -26,5 +26,7 @@
     vhdl_body        (vhdl);
 
-    vhdl.generate_file();
+    vhdl->generate_file();
+
+    delete vhdl;
   };
 
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 2)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl_body.cpp	(revision 42)
@@ -15,9 +15,9 @@
 
 
-  void Shifter::vhdl_body (Vhdl & vhdl)
+  void Shifter::vhdl_body (Vhdl * & vhdl)
   {
     //uint32_t log2_size_data = static_cast<uint32_t>(ceil(log2(_param._size_data)));
 
-    vhdl.set_body ("-- Compute all case of shift");
+    vhdl->set_body ("-- Compute all case of shift");
 
     for (uint32_t i=0; i<_param._nb_port; i++)
@@ -25,26 +25,26 @@
 	//-----[ Shift logic Left ]--------------------------------------------
 	if (_param._have_shift_logic_left)
-	  vhdl.set_body ("shift_logic_left_"+toString(i)+"        <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_DATA_"+toString(i)+") sll CONV_INTEGER(shift_"+toString(i)+"));");
+	  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)
-	  vhdl.set_body ("shift_logic_right_"+toString(i)+"       <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_DATA_"+toString(i)+") srl CONV_INTEGER(shift_"+toString(i)+"));");
+	  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)
-	  vhdl.set_body ("shift_arithmetic_left_"+toString(i)+"   <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_DATA_"+toString(i)+") sla CONV_INTEGER(shift_"+toString(i)+"));");
+	  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)
-	  vhdl.set_body ("shift_arithmetic_right_"+toString(i)+"  <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_DATA_"+toString(i)+") sra CONV_INTEGER(shift_"+toString(i)+"));");
+	  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)
-	  vhdl.set_body ("rotate_left_"+toString(i)+"             <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_DATA_"+toString(i)+") rol CONV_INTEGER(shift_"+toString(i)+"));");
+	  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)
-	  vhdl.set_body ("rotate_right_"+toString(i)+"            <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_DATA_"+toString(i)+") ror CONV_INTEGER(shift_"+toString(i)+"));");
+	  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)
       {
-	vhdl.set_body ("");
-	vhdl.set_body ("-- Mask");
+	vhdl->set_body ("");
+	vhdl->set_body ("-- Mask");
 
 	for (uint32_t i=0; i<_param._nb_port; i++)
@@ -53,34 +53,34 @@
 	    
 	    if (_param._type_completion_bool == true)
-	      print_shifter_completion = "in_SHIFTER_CARRY_IN";
+	      print_shifter_completion = "in_SHIFTER_"+toString(i)+"_CARRY_IN";
 	    else
-	      print_shifter_completion = "in_SHIFTER_COMPLETION";
+	      print_shifter_completion = "in_SHIFTER_"+toString(i)+"_COMPLETION";
 
 	    if (_param._size_data == _param._size_data_completion)
 	      {
-		vhdl.set_body ("shifter_completion_left_"+toString(i)+"  <= "+print_shifter_completion+"_"+toString(i)+";");
-		vhdl.set_body ("shifter_completion_right_"+toString(i)+" <= "+print_shifter_completion+"_"+toString(i)+";");
+		vhdl->set_body ("shifter_completion_left_"+toString(i)+"  <= "+print_shifter_completion+";");
+		vhdl->set_body ("shifter_completion_right_"+toString(i)+" <= "+print_shifter_completion+";");
 	      }
 	    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+"_"+toString(i)+";");
-
-		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+"_"+toString(i)+";");
-		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 ("mask_completion_left_"+toString(i)+"     <= TO_STDLOGICVECTOR(TO_BITVECTOR(cst_completion) sll CONV_INTEGER(shift_"+toString(i)+"));");
- 	    vhdl.set_body ("mask_completion_right_"+toString(i)+"    <= TO_STDLOGICVECTOR(TO_BITVECTOR(cst_completion) srl CONV_INTEGER(shift_"+toString(i)+"));");
+		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 ("mask_completion_left_"+toString(i)+"     <= TO_STDLOGICVECTOR(TO_BITVECTOR(cst_completion) sll CONV_INTEGER(shift_"+toString(i)+"));");
+ 	    vhdl->set_body ("mask_completion_right_"+toString(i)+"    <= TO_STDLOGICVECTOR(TO_BITVECTOR(cst_completion) srl CONV_INTEGER(shift_"+toString(i)+"));");
 	  }
       }
 	      
 
-    vhdl.set_body ("");
-    vhdl.set_body ("-- Multiplexor");
+    vhdl->set_body ("");
+    vhdl->set_body ("-- Multiplexor");
 
     for (uint32_t i=0; i<_param._nb_port; i++)
       {
-	vhdl.set_body ("out_SHIFTER_DATA_"+toString(i)+"       <=");
+	vhdl->set_body ("out_SHIFTER_"+toString(i)+"_DATA       <=");
 	string print_else = "    ";
 
@@ -95,11 +95,11 @@
 	      {
 		have_when = true;
-		print_when += " in_SHIFTER_DIRECTION_"+toString(i)+" = cst_is_direction_left ";
-		print_and = " and ";
-	      }
-	    if (_param._rotate      == external_rotate)
-	      {
-		have_when = true;
-		print_when += print_and+" in_SHIFTER_TYPE_"+toString(i)+" = cst_is_type_shift ";
+		print_when += " in_SHIFTER_"+toString(i)+"_DIRECTION = cst_is_direction_left ";
+		print_and = " and ";
+	      }
+	    if (_param._rotate      == external_rotate)
+	      {
+		have_when = true;
+		print_when += print_and+" in_SHIFTER_"+toString(i)+"_TYPE = cst_is_type_shift ";
 		print_and = " and ";
 	      }
@@ -107,11 +107,11 @@
 	      {
 		have_when = true;
-		print_when += print_and+" in_SHIFTER_CARRY_"+toString(i)+" = cst_is_carry_arithmetic";
-	      }
-
-	    if (have_when)
-	      print_when = "when " + print_when;
-
-	    vhdl.set_body ("\t"+print_else+" shift_arithmetic_left_"+toString(i)+"   "+print_when);
+		print_when += print_and+" in_SHIFTER_"+toString(i)+"_CARRY = cst_is_carry_arithmetic";
+	      }
+
+	    if (have_when)
+	      print_when = "when " + print_when;
+
+	    vhdl->set_body ("\t"+print_else+" shift_arithmetic_left_"+toString(i)+"   "+print_when);
 	    print_else = "else";
 	  }
@@ -126,11 +126,11 @@
 	      {
 		have_when = true;
-		print_when += " in_SHIFTER_DIRECTION_"+toString(i)+" = cst_is_direction_right";
-		print_and = " and ";
-	      }
-	    if (_param._rotate      == external_rotate)
-	      {
-		have_when = true;
-		print_when += print_and+" in_SHIFTER_TYPE_"+toString(i)+" = cst_is_type_shift ";
+		print_when += " in_SHIFTER_"+toString(i)+"_DIRECTION = cst_is_direction_right";
+		print_and = " and ";
+	      }
+	    if (_param._rotate      == external_rotate)
+	      {
+		have_when = true;
+		print_when += print_and+" in_SHIFTER_"+toString(i)+"_TYPE = cst_is_type_shift ";
 		print_and = " and ";
 	      }
@@ -138,11 +138,11 @@
 	      {
 		have_when = true;
-		print_when += print_and+" in_SHIFTER_CARRY_"+toString(i)+" = cst_is_carry_arithmetic";
-	      }
-
-	    if (have_when)
-	      print_when = "when " + print_when;
-
-	    vhdl.set_body ("\t"+print_else+" shift_arithmetic_right_"+toString(i)+"  "+print_when);
+		print_when += print_and+" in_SHIFTER_"+toString(i)+"_CARRY = cst_is_carry_arithmetic";
+	      }
+
+	    if (have_when)
+	      print_when = "when " + print_when;
+
+	    vhdl->set_body ("\t"+print_else+" shift_arithmetic_right_"+toString(i)+"  "+print_when);
 	    print_else = "else";
 	  }
@@ -157,11 +157,11 @@
 	      {
 		have_when = true;
-		print_when += " in_SHIFTER_DIRECTION_"+toString(i)+" = cst_is_direction_left ";
-		print_and = " and ";
-	      }
-	    if (_param._rotate      == external_rotate)
-	      {
-		have_when = true;
-		print_when += print_and+" in_SHIFTER_TYPE_"+toString(i)+" = cst_is_type_shift ";
+		print_when += " in_SHIFTER_"+toString(i)+"_DIRECTION = cst_is_direction_left ";
+		print_and = " and ";
+	      }
+	    if (_param._rotate      == external_rotate)
+	      {
+		have_when = true;
+		print_when += print_and+" in_SHIFTER_"+toString(i)+"_TYPE = cst_is_type_shift ";
 		print_and = " and ";
 	      }
@@ -169,5 +169,5 @@
 	      {
 		have_when = true;
-		print_when += print_and+" in_SHIFTER_CARRY_"+toString(i)+" = cst_is_carry_logic     ";
+		print_when += print_and+" in_SHIFTER_"+toString(i)+"_CARRY = cst_is_carry_logic     ";
 	      }
 
@@ -182,5 +182,5 @@
 	      print_expr_completion = "(shift_logic_left_"+toString(i)+"  and mask_completion_left_"+toString(i)+" ) or ( shifter_completion_left_"+toString(i)+"  and not mask_completion_left_"+toString(i)+" )";
 
-	    vhdl.set_body ("\t"+print_else+" "+print_expr_completion+"        "+print_when);
+	    vhdl->set_body ("\t"+print_else+" "+print_expr_completion+"        "+print_when);
 	    print_else = "else";
 	  }
@@ -195,11 +195,11 @@
 	      {
 		have_when = true;
-		print_when += " in_SHIFTER_DIRECTION_"+toString(i)+" = cst_is_direction_right";
-		print_and = " and ";
-	      }
-	    if (_param._rotate      == external_rotate)
-	      {
-		have_when = true;
-		print_when += print_and+" in_SHIFTER_TYPE_"+toString(i)+" = cst_is_type_shift ";
+		print_when += " in_SHIFTER_"+toString(i)+"_DIRECTION = cst_is_direction_right";
+		print_and = " and ";
+	      }
+	    if (_param._rotate      == external_rotate)
+	      {
+		have_when = true;
+		print_when += print_and+" in_SHIFTER_"+toString(i)+"_TYPE = cst_is_type_shift ";
 		print_and = " and ";
 	      }
@@ -207,5 +207,5 @@
 	      {
 		have_when = true;
-		print_when += print_and+" in_SHIFTER_CARRY_"+toString(i)+" = cst_is_carry_logic     ";
+		print_when += print_and+" in_SHIFTER_"+toString(i)+"_CARRY = cst_is_carry_logic     ";
 	      }
 
@@ -220,5 +220,5 @@
 	      print_expr_completion = "(shift_logic_right_"+toString(i)+" and mask_completion_right_"+toString(i)+") or ( shifter_completion_right_"+toString(i)+" and not mask_completion_right_"+toString(i)+")";
 
-	    vhdl.set_body ("\t"+print_else+" "+print_expr_completion+"        "+print_when);
+	    vhdl->set_body ("\t"+print_else+" "+print_expr_completion+"        "+print_when);
 	    print_else = "else";
 	  }
@@ -233,18 +233,18 @@
 	      {
 		have_when = true;
-		print_when += " in_SHIFTER_DIRECTION_"+toString(i)+" = cst_is_direction_left ";
-		print_and = " and ";
-	      }
-	    if (_param._rotate      == external_rotate)
-	      {
-		have_when = true;
-		print_when += print_and+" in_SHIFTER_TYPE_"+toString(i)+" = cst_is_type_rotate";
-		print_and = " and ";
-	      }
-
-	    if (have_when)
-	      print_when = "when " + print_when;
-
-	    vhdl.set_body ("\t"+print_else+" rotate_left_"+toString(i)+"             "+print_when);
+		print_when += " in_SHIFTER_"+toString(i)+"_DIRECTION = cst_is_direction_left ";
+		print_and = " and ";
+	      }
+	    if (_param._rotate      == external_rotate)
+	      {
+		have_when = true;
+		print_when += print_and+" in_SHIFTER_"+toString(i)+"_TYPE = cst_is_type_rotate";
+		print_and = " and ";
+	      }
+
+	    if (have_when)
+	      print_when = "when " + print_when;
+
+	    vhdl->set_body ("\t"+print_else+" rotate_left_"+toString(i)+"             "+print_when);
 	    print_else = "else";
 	  }
@@ -259,21 +259,21 @@
 	      {
 		have_when = true;
-		print_when += " in_SHIFTER_DIRECTION_"+toString(i)+" = cst_is_direction_right";
-		print_and = " and ";
-	      }
-	    if (_param._rotate      == external_rotate)
-	      {
-		have_when = true;
-		print_when += print_and+" in_SHIFTER_TYPE_"+toString(i)+" = cst_is_type_rotate";
-		print_and = " and ";
-	      }
-
-	    if (have_when)
-	      print_when = "when " + print_when;
-
-	    vhdl.set_body ("\t"+print_else+" rotate_right_"+toString(i)+"            "+print_when);
-	    print_else = "else";
-	  }
-	vhdl.set_body (";");
+		print_when += " in_SHIFTER_"+toString(i)+"_DIRECTION = cst_is_direction_right";
+		print_and = " and ";
+	      }
+	    if (_param._rotate      == external_rotate)
+	      {
+		have_when = true;
+		print_when += print_and+" in_SHIFTER_"+toString(i)+"_TYPE = cst_is_type_rotate";
+		print_and = " and ";
+	      }
+
+	    if (have_when)
+	      print_when = "when " + print_when;
+
+	    vhdl->set_body ("\t"+print_else+" rotate_right_"+toString(i)+"            "+print_when);
+	    print_else = "else";
+	  }
+	vhdl->set_body (";");
       }
     
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl_declaration.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl_declaration.cpp	(revision 2)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl_declaration.cpp	(revision 42)
@@ -15,54 +15,54 @@
 
 
-  void Shifter::vhdl_declaration (Vhdl & vhdl)
+  void Shifter::vhdl_declaration (Vhdl * & vhdl)
   {
     uint32_t log2_size_data = static_cast<uint32_t>(ceil(log2(_param._size_data)));
 
-    vhdl.set_constant("cst_is_direction_left  ",1,_left      );
-    vhdl.set_constant("cst_is_direction_right ",1,_right     );
-    vhdl.set_constant("cst_is_type_shift      ",1,_shift     );
-    vhdl.set_constant("cst_is_type_rotate     ",1,_rotate    );
-    vhdl.set_constant("cst_is_carry_arithmetic",1,_arithmetic);
-    vhdl.set_constant("cst_is_carry_logic     ",1,_logic     );
-    vhdl.set_constant("cst_completion         ",_param._size_data,"(others => '1')");
+    vhdl->set_constant("cst_is_direction_left  ",1,_left      );
+    vhdl->set_constant("cst_is_direction_right ",1,_right     );
+    vhdl->set_constant("cst_is_type_shift      ",1,_shift     );
+    vhdl->set_constant("cst_is_type_rotate     ",1,_rotate    );
+    vhdl->set_constant("cst_is_carry_arithmetic",1,_arithmetic);
+    vhdl->set_constant("cst_is_carry_logic     ",1,_logic     );
+    vhdl->set_constant("cst_completion         ",_param._size_data,"(others => '1')");
     
     for (uint32_t i=0; i<_param._nb_port; i++)
       {
 	if (_param._shift_value != 0)
-	  vhdl.set_constant("shift_"+toString(i),log2_size_data, _param._shift_value);
+	  vhdl->set_constant("shift_"+toString(i),log2_size_data, _param._shift_value);
 	else
-	  vhdl.set_alias   ("shift_"+toString(i),std_logic(log2_size_data), "in_SHIFTER_SHIFT_"+toString(i),std_logic_range(log2_size_data));
+	  vhdl->set_alias   ("shift_"+toString(i),std_logic(log2_size_data), "in_SHIFTER_"+toString(i)+"_SHIFT",std_logic_range(log2_size_data));
 	
 	if (_param._size_data_completion > 0)
 	  {
-	    vhdl.set_signal ("shifter_completion_left_"+toString(i)+" ",_param._size_data);
-	    vhdl.set_signal ("shifter_completion_right_"+toString(i)+"",_param._size_data);
-	    vhdl.set_signal ("mask_completion_left_"+toString(i)+"    ",_param._size_data);
-	    vhdl.set_signal ("mask_completion_right_"+toString(i)+"   ",_param._size_data);
+	    vhdl->set_signal ("shifter_completion_left_"+toString(i)+" ",_param._size_data);
+	    vhdl->set_signal ("shifter_completion_right_"+toString(i)+"",_param._size_data);
+	    vhdl->set_signal ("mask_completion_left_"+toString(i)+"    ",_param._size_data);
+	    vhdl->set_signal ("mask_completion_right_"+toString(i)+"   ",_param._size_data);
 	  }
 	
 	//-----[ Shift logic Left ]--------------------------------------------
 	if (_param._have_shift_logic_left)
-	  vhdl.set_signal ("shift_logic_left_"+toString(i)+"      ",_param._size_data);
+	  vhdl->set_signal ("shift_logic_left_"+toString(i)+"      ",_param._size_data);
 	
 	//-----[ Shift logic Right ]-------------------------------------------
 	if (_param._have_shift_logic_right)
-	  vhdl.set_signal ("shift_logic_right_"+toString(i)+"     ",_param._size_data);
+	  vhdl->set_signal ("shift_logic_right_"+toString(i)+"     ",_param._size_data);
 	
 	//-----[ Shift arithmetic Left ]---------------------------------------
 	if (_param._have_shift_arithmetic_left)
-	  vhdl.set_signal ("shift_arithmetic_left_"+toString(i)+" ",_param._size_data);
+	  vhdl->set_signal ("shift_arithmetic_left_"+toString(i)+" ",_param._size_data);
 	
 	//-----[ Shift arithmetic Right ]--------------------------------------
 	if (_param._have_shift_arithmetic_right)
-	  vhdl.set_signal ("shift_arithmetic_right_"+toString(i)+"",_param._size_data);
+	  vhdl->set_signal ("shift_arithmetic_right_"+toString(i)+"",_param._size_data);
 	
 	//-----[ Rotate Left ]-------------------------------------------------
 	if (_param._have_rotate_left)
-	  vhdl.set_signal ("rotate_left_"+toString(i)+"           ",_param._size_data);
+	  vhdl->set_signal ("rotate_left_"+toString(i)+"           ",_param._size_data);
 	
 	//-----[ Rotate Right ]------------------------------------------------
 	if (_param._have_rotate_right)
-	  vhdl.set_signal ("rotate_right_"+toString(i)+"          ",_param._size_data);
+	  vhdl->set_signal ("rotate_right_"+toString(i)+"          ",_param._size_data);
       }
   };
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl_port.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl_port.cpp	(revision 2)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl_port.cpp	(revision 42)
@@ -15,25 +15,7 @@
 
 
-  void Shifter::vhdl_port (Vhdl & vhdl)
+  void Shifter::vhdl_port (Vhdl * & vhdl)
   {
-    for (uint32_t i=0; i<_param._nb_port; i++)
-      {
-	vhdl.set_port (" in_SHIFTER_DATA_"+toString(i)+"      ", IN, _param._size_data);
-	if (_param._shift_value == 0)
-	vhdl.set_port (" in_SHIFTER_SHIFT_"+toString(i)+"     ", IN, static_cast<uint32_t>(ceil(log2(_param._size_data))));
-	if (_param._direction   == external_direction)
-	vhdl.set_port (" in_SHIFTER_DIRECTION_"+toString(i)+" ", IN, 1);
-	if (_param._rotate      == external_rotate)
-	vhdl.set_port (" in_SHIFTER_TYPE_"+toString(i)+"      ", IN, 1);
-	if (_param._carry       == external_carry)
-	vhdl.set_port (" in_SHIFTER_CARRY_"+toString(i)+"     ", IN, 1);
-	if (_param._carry       == external_completion)
-	if (_param._type_completion_bool == true)
-	vhdl.set_port (" in_SHIFTER_CARRY_IN_"+toString(i)+"  ", IN, 1);
-	else
-	vhdl.set_port (" in_SHIFTER_COMPLETION_"+toString(i)+"", IN, _param._size_data_completion);
-
-	vhdl.set_port ("out_SHIFTER_DATA_"+toString(i)+"      ",OUT, _param._size_data);
-      }
+    _interfaces->set_port(vhdl);
   };
 }; // end namespace shifter
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl_testbench_port.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl_testbench_port.cpp	(revision 2)
+++ 	(revision )
@@ -1,44 +1,0 @@
-#ifdef VHDL_TESTBENCH
-/*
- * $Id$
- *
- * [ Description ]
- * 
- */
-
-#include "Behavioural/Generic/Shifter/include/Shifter.h"
-
-namespace morpheo                    {
-namespace behavioural {
-namespace generic {
-namespace shifter {
-
-
-  void Shifter::vhdl_testbench_port (Vhdl_Testbench & vhdl_testbench)
-  {
-    for (uint32_t i=0; i<_param._nb_port; i++)
-      {
-	vhdl_testbench.set_port (" in_SHIFTER_DATA_"+toString(i)      , IN, _param._size_data);
-	if (_param._shift_value == 0)
-	vhdl_testbench.set_port (" in_SHIFTER_SHIFT_"+toString(i)     , IN, static_cast<uint32_t>(ceil(log2(_param._size_data))));
-	if (_param._direction   == external_direction)
-	vhdl_testbench.set_port (" in_SHIFTER_DIRECTION_"+toString(i) , IN, 1);
-	if (_param._rotate      == external_rotate)
-	vhdl_testbench.set_port (" in_SHIFTER_TYPE_"+toString(i)      , IN, 1);
-	if (_param._carry       == external_carry)
-	vhdl_testbench.set_port (" in_SHIFTER_CARRY_"+toString(i)     , IN, 1);
-	if (_param._carry       == external_completion)
-	if (_param._type_completion_bool == true)
-	vhdl_testbench.set_port (" in_SHIFTER_CARRY_IN_"+toString(i)  , IN, 1);
-	else
-	vhdl_testbench.set_port (" in_SHIFTER_COMPLETION_"+toString(i), IN, _param._size_data_completion);
-	vhdl_testbench.set_port ("out_SHIFTER_DATA_"+toString(i)      ,OUT, _param._size_data);
-      }
-  };
-
-}; // end namespace shifter
-}; // end namespace generic
-
-}; // end namespace behavioural
-}; // end namespace morpheo              
-#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl_testbench_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl_testbench_transition.cpp	(revision 2)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl_testbench_transition.cpp	(revision 42)
@@ -15,37 +15,9 @@
 
 
-  void Shifter::vhdl_testbench_transition (Vhdl_Testbench & vhdl_testbench)
+  void Shifter::vhdl_testbench_transition (void)
   {
-#ifndef SYSTEMCASS_SPECIFIC
-    sc_cycle(0);
-#endif
+    sc_start(0);
 
-    // In order with file Shifter_vhdl_testbench_port.cpp
-
-    for (uint32_t i=0; i<_param._nb_port; i++)
-      {
-	vhdl_testbench.add_input  (PORT_READ( in_SHIFTER_DATA      [i]));
-	if (_param._shift_value == 0)
-	vhdl_testbench.add_input  (PORT_READ( in_SHIFTER_SHIFT     [i]));
-	if (_param._direction   == external_direction)
-	vhdl_testbench.add_input  (PORT_READ( in_SHIFTER_DIRECTION [i]));
-	if (_param._rotate      == external_rotate)
-	vhdl_testbench.add_input  (PORT_READ( in_SHIFTER_TYPE      [i]));
-	if (_param._carry       == external_carry)
-	vhdl_testbench.add_input  (PORT_READ( in_SHIFTER_CARRY     [i]));
-	if (_param._carry       == external_completion)
-	if (_param._type_completion_bool == true)
-	vhdl_testbench.add_input  (PORT_READ( in_SHIFTER_CARRY_IN  [i]));
-	else
-	vhdl_testbench.add_input  (PORT_READ( in_SHIFTER_COMPLETION[i]));
-	vhdl_testbench.add_output (PORT_READ(out_SHIFTER_DATA      [i]));
-      }
-    
-    // add_test :
-    //  - True  : the cycle must be compare with the output of systemC
-    //  - False : no test
-    vhdl_testbench.add_test(true);
-
-    vhdl_testbench.new_cycle (); // always at the end
+    _interfaces->testbench();
   };
 
