Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier.cpp	(revision 112)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier.cpp	(revision 116)
@@ -77,13 +77,17 @@
 # endif    
 
-// 	log_printf(INFO,Multiplier,FUNCTION,_("<%s> : Method - genMoore"),_name.c_str());
+	log_printf(INFO,Multiplier,FUNCTION,_("<%s> : Method - genMealy"),_name.c_str());
 
-// 	SC_METHOD (genMoore);
-// 	dont_initialize ();
-// 	sensitive << (*(in_CLOCK)).neg(); // need internal register
+	SC_METHOD (genMealy);
+	dont_initialize ();
+	sensitive << (*(in_CLOCK)).neg(); // need internal register
+
+        if (_param->_latency == 0)
+          sensitive << (*(in_MULTIPLIER_DATA_IN_0))
+                    << (*(in_MULTIPLIER_DATA_IN_1));
 	
-// # ifdef SYSTEMCASS_SPECIFIC
-// 	// List dependency information
-// # endif    
+# ifdef SYSTEMCASS_SPECIFIC
+	// List dependency information
+# endif    
 	
 #endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier_allocation.cpp	(revision 112)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier_allocation.cpp	(revision 116)
@@ -53,4 +53,26 @@
       in_NRESET       = interface->set_signal_in  <Tcontrol_t> ("nreset",1, RESET_VHDL_YES);
     }
+
+    // ~~~~~[ Interface "multiplier" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    {
+      ALLOC0_INTERFACE_BEGIN("multiplier", IN, WEST, _("Multiplier's interface."));
+      
+      ALLOC0_SIGNAL_IN ( in_MULTIPLIER_DATA_IN_0,"data_in_0",Tdata_t   ,_param->_size_data);
+      ALLOC0_SIGNAL_IN ( in_MULTIPLIER_DATA_IN_1,"data_in_1",Tdata_t   ,_param->_size_data);
+      ALLOC0_SIGNAL_IN ( in_MULTIPLIER_NSTALL   ,"nstall"   ,Tcontrol_t,1);
+      ALLOC0_SIGNAL_OUT(out_MULTIPLIER_DATA_LSB_OUT ,"data_lsb_out" ,Tdata_t   ,_param->_size_data);
+      ALLOC0_SIGNAL_OUT(out_MULTIPLIER_DATA_MSB_OUT ,"data_msb_out" ,Tdata_t   ,_param->_size_data);
+
+      ALLOC0_INTERFACE_END();
+    }
+
+     // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+#ifdef SYSTEMC
+    if (usage_is_set(_usage,USE_SYSTEMC_BODY))
+      {
+        _pipeline = new std::vector<result_t>(_param->_latency+1);
+      }
+#endif
+
     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier_deallocation.cpp	(revision 112)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier_deallocation.cpp	(revision 116)
@@ -25,6 +25,20 @@
 	delete    in_CLOCK ;
 	delete    in_NRESET;
+
+        DELETE0_SIGNAL(in_MULTIPLIER_DATA_IN_0,_param->_size_data);
+        DELETE0_SIGNAL(in_MULTIPLIER_DATA_IN_1,_param->_size_data);
+        DELETE0_SIGNAL(in_MULTIPLIER_NSTALL   ,1);
+                                              
+        DELETE0_SIGNAL(out_MULTIPLIER_DATA_LSB_OUT,_param->_size_data);
+        DELETE0_SIGNAL(out_MULTIPLIER_DATA_MSB_OUT,_param->_size_data);
+
       }
     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+#ifdef SYSTEMC
+    if (usage_is_set(_usage,USE_SYSTEMC_BODY))
+      {
+        delete _pipeline;
+      }
+#endif
 
     delete _component;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier_genMealy.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier_genMealy.cpp	(revision 116)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier_genMealy.cpp	(revision 116)
@@ -0,0 +1,34 @@
+#ifdef SYSTEMC
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Generic/Multiplier/include/Multiplier.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace generic {
+namespace multiplier {
+
+
+#undef  FUNCTION
+#define FUNCTION "Multiplier::genMealy"
+  void Multiplier::genMealy (void)
+  {
+    log_begin(Multiplier,FUNCTION);
+
+    PORT_WRITE(out_MULTIPLIER_DATA_LSB_OUT, _pipeline->at(0).LSB);
+    PORT_WRITE(out_MULTIPLIER_DATA_MSB_OUT, _pipeline->at(0).MSB);
+
+    log_end(Multiplier,FUNCTION);
+  };
+
+}; // end namespace multiplier
+}; // end namespace generic
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier_transition.cpp	(revision 112)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier_transition.cpp	(revision 116)
@@ -20,9 +20,180 @@
   {
     log_begin(Multiplier,FUNCTION);
-
+    
+    // Test if stall
+    if (PORT_READ(in_MULTIPLIER_NSTALL))
+      {
+        // Pop a slot of array
+        for (uint32_t i=1;i<_pipeline->size();i++)
+          _pipeline->at(i-1)=_pipeline->at(i);
+
+        result_t data;
+        
+        switch (_param->_size_data)
+          {
+          case 8 :
+            {
+              if (_param->_sign) // 0 = signed, 1 = unsigned
+                {
+                  sc_uint<8> data_0 = static_cast<sc_uint<8> >(PORT_READ(in_MULTIPLIER_DATA_IN_0));
+                  sc_uint<8> data_1 = static_cast<sc_uint<8> >(PORT_READ(in_MULTIPLIER_DATA_IN_1));
+                  sc_uint<16> tmp    = (static_cast<sc_uint<16> >(data_0) * 
+                                        static_cast<sc_uint<16> >(data_1));
+                  
+                  data.LSB = static_cast<Tdata_t>(_param->_mask &  tmp);
+                  data.MSB = static_cast<Tdata_t>(_param->_mask & (tmp>>8));
+                  
+//                   std::cout << "uint8 : data_0 : " << std::hex << data_0 << std::dec << std::endl;
+//                   std::cout << "uint8 : data_1 : " << std::hex << data_1 << std::dec << std::endl;
+//                   std::cout << "uint8 : tmp    : " << std::hex << tmp << std::dec << std::endl;
+//                   std::cout << "uint8 : lsb    : " << std::hex << data.LSB << std::dec << std::endl;
+//                   std::cout << "uint8 : msb    : " << std::hex << data.MSB << std::dec << std::endl;
+                  
+//                   log_printf(TRACE,Multiplier,FUNCTION,"  * signed");
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * data0 = %llx(%lld)",data_0, data_0);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * data1 = %llx(%lld)",data_1, data_1);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * res   = %llx(%lld)",tmp, tmp);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * LSB   = %x (%d)",data.LSB, data.LSB);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * MSB   = %x (%d)",data.MSB, data.MSB);
+                }
+              else
+                {
+                  sc_int<8> data_0 = static_cast<sc_int<8> >(PORT_READ(in_MULTIPLIER_DATA_IN_0));
+                  sc_int<8> data_1 = static_cast<sc_int<8> >(PORT_READ(in_MULTIPLIER_DATA_IN_1));
+                  sc_int<16> tmp    = (static_cast<sc_int<16> >(data_0) * 
+                                       static_cast<sc_int<16> >(data_1));
+                  
+                  data.LSB = static_cast<Tdata_t>(_param->_mask &  tmp);
+                  data.MSB = static_cast<Tdata_t>(_param->_mask & (tmp>>8));
+                  
+//                   std::cout << "int8 : data_0 : " << std::hex << data_0 << std::dec << std::endl;
+//                   std::cout << "int8 : data_1 : " << std::hex << data_1 << std::dec << std::endl;
+//                   std::cout << "int8 : tmp    : " << std::hex << tmp << std::dec << std::endl;
+//                   std::cout << "int8 : lsb    : " << std::hex << data.LSB << std::dec << std::endl;
+//                   std::cout << "int8 : msb    : " << std::hex << data.MSB << std::dec << std::endl;
+                  
+//                   log_printf(TRACE,Multiplier,FUNCTION,"  * signed");
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * data0 = %llx(%lld)",data_0, data_0);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * data1 = %llx(%lld)",data_1, data_1);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * res   = %llx(%lld)",tmp, tmp);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * LSB   = %x (%d)",data.LSB, data.LSB);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * MSB   = %x (%d)",data.MSB, data.MSB);
+                }
+              break;
+            }
+          case 16 :
+            {
+              if (_param->_sign) // 0 = signed, 1 = unsigned
+                {
+                  sc_uint<16> data_0 = static_cast<sc_uint<16> >(PORT_READ(in_MULTIPLIER_DATA_IN_0));
+                  sc_uint<16> data_1 = static_cast<sc_uint<16> >(PORT_READ(in_MULTIPLIER_DATA_IN_1));
+                  sc_uint<32> tmp    = (static_cast<sc_uint<32> >(data_0) * 
+                                        static_cast<sc_uint<32> >(data_1));
+                  
+                  data.LSB = static_cast<Tdata_t>(_param->_mask &  tmp);
+                  data.MSB = static_cast<Tdata_t>(_param->_mask & (tmp>>16));
+                  
+//                   std::cout << "uint16 : data_0 : " << std::hex << data_0 << std::dec << std::endl;
+//                   std::cout << "uint16 : data_1 : " << std::hex << data_1 << std::dec << std::endl;
+//                   std::cout << "uint16 : tmp    : " << std::hex << tmp << std::dec << std::endl;
+//                   std::cout << "uint16 : lsb    : " << std::hex << data.LSB << std::dec << std::endl;
+//                   std::cout << "uint16 : msb    : " << std::hex << data.MSB << std::dec << std::endl;
+                  
+//                   log_printf(TRACE,Multiplier,FUNCTION,"  * signed");
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * data0 = %llx(%lld)",data_0, data_0);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * data1 = %llx(%lld)",data_1, data_1);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * res   = %llx(%lld)",tmp, tmp);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * LSB   = %x (%d)",data.LSB, data.LSB);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * MSB   = %x (%d)",data.MSB, data.MSB);
+                }
+              else
+                {
+                  sc_int<16> data_0 = static_cast<sc_int<16> >(PORT_READ(in_MULTIPLIER_DATA_IN_0));
+                  sc_int<16> data_1 = static_cast<sc_int<16> >(PORT_READ(in_MULTIPLIER_DATA_IN_1));
+                  sc_int<32> tmp    = (static_cast<sc_int<32> >(data_0) * 
+                                       static_cast<sc_int<32> >(data_1));
+                  
+                  data.LSB = static_cast<Tdata_t>(_param->_mask &  tmp);
+                  data.MSB = static_cast<Tdata_t>(_param->_mask & (tmp>>16));
+                  
+                  std::cout << "int16 : data_0 : " << std::hex << data_0   << std::dec << " - dec : " << data_0 << std::endl;
+                  std::cout << "int16 : data_1 : " << std::hex << data_1   << std::dec << " - dec : " << data_1 << std::endl;
+                  std::cout << "int16 : tmp    : " << std::hex << tmp      << std::dec << " - dec : " << tmp    << std::endl;
+                  std::cout << "int16 : lsb    : " << std::hex << data.LSB << std::dec << std::endl;
+                  std::cout << "int16 : msb    : " << std::hex << data.MSB << std::dec << std::endl;
+                  
+//                   log_printf(TRACE,Multiplier,FUNCTION,"  * signed");
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * data0 = %llx(%lld)",data_0, data_0);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * data1 = %llx(%lld)",data_1, data_1);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * res   = %llx(%lld)",tmp, tmp);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * LSB   = %x (%d)",data.LSB, data.LSB);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * MSB   = %x (%d)",data.MSB, data.MSB);
+                }
+              break;
+            }
+          case 32 :
+            {
+              if (_param->_sign) // 0 = signed, 1 = unsigned
+                {
+                  sc_uint<32> data_0 = static_cast<sc_uint<32> >(PORT_READ(in_MULTIPLIER_DATA_IN_0));
+                  sc_uint<32> data_1 = static_cast<sc_uint<32> >(PORT_READ(in_MULTIPLIER_DATA_IN_1));
+                  sc_uint<64> tmp    = (static_cast<sc_uint<64> >(data_0) * 
+                                        static_cast<sc_uint<64> >(data_1));
+                  
+                  data.LSB = static_cast<Tdata_t>(_param->_mask &  tmp);
+                  data.MSB = static_cast<Tdata_t>(_param->_mask & (tmp>>32));
+                  
+//                   std::cout << "uint32 : data_0 : " << std::hex << data_0 << std::dec << std::endl;
+//                   std::cout << "uint32 : data_1 : " << std::hex << data_1 << std::dec << std::endl;
+//                   std::cout << "uint32 : tmp    : " << std::hex << tmp << std::dec << std::endl;
+//                   std::cout << "uint32 : lsb    : " << std::hex << data.LSB << std::dec << std::endl;
+//                   std::cout << "uint32 : msb    : " << std::hex << data.MSB << std::dec << std::endl;
+                  
+//                   log_printf(TRACE,Multiplier,FUNCTION,"  * signed");
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * data0 = %llx(%lld)",data_0, data_0);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * data1 = %llx(%lld)",data_1, data_1);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * res   = %llx(%lld)",tmp, tmp);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * LSB   = %x (%d)",data.LSB, data.LSB);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * MSB   = %x (%d)",data.MSB, data.MSB);
+                }
+              else
+                {
+                  sc_int<32> data_0 = static_cast<sc_int<32> >(PORT_READ(in_MULTIPLIER_DATA_IN_0));
+                  sc_int<32> data_1 = static_cast<sc_int<32> >(PORT_READ(in_MULTIPLIER_DATA_IN_1));
+                  sc_int<64> tmp    = (static_cast<sc_int<64> >(data_0) * 
+                                       static_cast<sc_int<64> >(data_1));
+                  
+                  data.LSB = static_cast<Tdata_t>(_param->_mask &  tmp);
+                  data.MSB = static_cast<Tdata_t>(_param->_mask & (tmp>>32));
+                  
+//                   std::cout << "int32 : data_0 : " << std::hex << data_0 << std::dec << std::endl;
+//                   std::cout << "int32 : data_1 : " << std::hex << data_1 << std::dec << std::endl;
+//                   std::cout << "int32 : tmp    : " << std::hex << tmp << std::dec << std::endl;
+//                   std::cout << "int32 : lsb    : " << std::hex << data.LSB << std::dec << std::endl;
+//                   std::cout << "int32 : msb    : " << std::hex << data.MSB << std::dec << std::endl;
+                  
+//                   log_printf(TRACE,Multiplier,FUNCTION,"  * signed");
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * data0 = %llx(%lld)",data_0, data_0);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * data1 = %llx(%lld)",data_1, data_1);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * res   = %llx(%lld)",tmp, tmp);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * LSB   = %x (%d)",data.LSB, data.LSB);
+//                   log_printf(TRACE,Multiplier,FUNCTION,"    * MSB   = %x (%d)",data.MSB, data.MSB);
+                }
+              break;
+            }
+          default :
+            {
+              break;
+            }
+          }
+        
+        _pipeline->at(_param->_latency-1) = data;
+        
+      }
+    
 #if defined(STATISTICS) or defined(VHDL_TESTBENCH)
     end_cycle ();
 #endif
-
+    
     log_end(Multiplier,FUNCTION);
   };
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier_vhdl.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier_vhdl.cpp	(revision 112)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier_vhdl.cpp	(revision 116)
@@ -27,6 +27,12 @@
     _component->vhdl_instance(vhdl);
 
+    // default architecture
     vhdl_declaration (vhdl);
     vhdl_body        (vhdl);
+
+    // Xilinx architecture
+    vhdl->set_architecture("xilinx");
+    vhdl_xilinx_declaration (vhdl);
+    vhdl_xilinx_body        (vhdl);
 
     vhdl->generate_file();
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier_vhdl_xilinx_body.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier_vhdl_xilinx_body.cpp	(revision 116)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier_vhdl_xilinx_body.cpp	(revision 116)
@@ -0,0 +1,53 @@
+#ifdef VHDL
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Generic/Multiplier/include/Multiplier.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace generic {
+namespace multiplier {
+
+#undef  FUNCTION
+#define FUNCTION "Multiplier::vhdl_xilinx_body"
+  void Multiplier::vhdl_xilinx_body (Vhdl * & vhdl)
+  {
+
+    log_begin(Multiplier,FUNCTION);
+    vhdl->set_body (0,"ins_mult_gen_v9_0 : mult_gen_v9_0");
+    vhdl->set_body (1,"generic map (");
+    vhdl->set_body (2,"  c_xdevicefamily => \"virtex4\",  -- specifies target Xilinx FPGA name");
+    vhdl->set_body (2,"  c_a_width       => "+toString(_param->_size_data)+",         -- width of A port");
+    vhdl->set_body (2,"  c_a_type        => "+toString(_param->_sign)+",          -- datatype of A port");
+    vhdl->set_body (2,"  c_b_width       => "+toString(_param->_size_data)+",         -- width of B port");
+    vhdl->set_body (2,"  c_b_type        => "+toString(_param->_sign)+",          -- datatype of B port");
+    vhdl->set_body (2,"  c_out_high      => "+toString((_param->_size_data*2)-1)+",         -- MSB of P output port (N-1 downto 0 convention)");
+    vhdl->set_body (2,"  c_mult_type     => 1,          -- Type of multiplier to implement");
+    vhdl->set_body (2,"  c_opt_goal      => 1,          -- Optimization of multiplier");
+    vhdl->set_body (2,"  c_has_ce        => 1,          -- Use clock enable on all registers");
+    vhdl->set_body (2,"  c_pipe_stages   => "+toString(_param->_latency)+")          -- Number of register stages required");
+    
+    vhdl->set_body (1,"port map (");
+    vhdl->set_body (2,"clk =>  in_CLOCK               ,");
+    vhdl->set_body (2,"a   =>  in_MULTIPLIER_DATA_IN_0,");
+    vhdl->set_body (2,"b   =>  in_MULTIPLIER_DATA_IN_1,");
+    vhdl->set_body (2,"ce  =>  in_MULTIPLIER_NSTALL   ,");
+    vhdl->set_body (2,"p   => sig_MULTIPLIER_DATA_OUT);");
+
+    vhdl->set_body (0,"out_MULTIPLIER_DATA_LSB_OUT <= sig_MULTIPLIER_DATA_OUT("+toString(_param->_size_data-1)+" downto 0);");
+    vhdl->set_body (0,"out_MULTIPLIER_DATA_MSB_OUT <= sig_MULTIPLIER_DATA_OUT("+toString((_param->_size_data*2)-1)+" downto "+toString(_param->_size_data)+");");
+
+    log_end(Multiplier,FUNCTION);
+  };
+
+}; // end namespace multiplier
+}; // end namespace generic
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier_vhdl_xilinx_declaration.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier_vhdl_xilinx_declaration.cpp	(revision 116)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Multiplier_vhdl_xilinx_declaration.cpp	(revision 116)
@@ -0,0 +1,34 @@
+#ifdef VHDL
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Generic/Multiplier/include/Multiplier.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace generic {
+namespace multiplier {
+
+#undef  FUNCTION
+#define FUNCTION "Multiplier::vhdl_xilinx_declaration"
+  void Multiplier::vhdl_xilinx_declaration (Vhdl * & vhdl)
+  {
+    log_begin(Multiplier,FUNCTION);
+
+    vhdl->set_library("XilinxCoreLib","mult_gen_v9_0_comp","all");
+
+    vhdl->set_signal  ("sig_MULTIPLIER_DATA_OUT", _param->_size_data*2);
+
+    log_end(Multiplier,FUNCTION);
+  };
+
+}; // end namespace multiplier
+}; // end namespace generic
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Parameters.cpp	(revision 112)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Parameters.cpp	(revision 116)
@@ -7,4 +7,5 @@
 
 #include "Behavioural/Generic/Multiplier/include/Parameters.h"
+#include "Common/include/BitManipulation.h"
 
 namespace morpheo {
@@ -16,7 +17,19 @@
 #undef  FUNCTION
 #define FUNCTION "Multiplier::Parameters"
-  Parameters::Parameters (bool is_toplevel)
+  Parameters::Parameters (uint32_t             size_data,
+                          bool                 sign     ,
+                          uint32_t             latency  ,
+                          uint32_t             delay    ,
+                          bool is_toplevel)
   {
+
     log_begin(Multiplier,FUNCTION);
+
+    _size_data  = size_data;
+    _sign       = sign     ;
+    _latency    = latency  ;
+    _delay      = delay    ;
+    _mask       = gen_mask<Tdata_t>(_size_data);
+//     _shift_sign = size_data-1;
 
     test();
@@ -35,5 +48,5 @@
 //   {
 //     log_begin(Multiplier,FUNCTION);
-//     test();
+//     test();x
 //     log_end(Multiplier,FUNCTION);
 //   };
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Parameters_msg_error.cpp	(revision 112)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Multiplier/src/Parameters_msg_error.cpp	(revision 116)
@@ -24,4 +24,13 @@
     Parameters_test test ("Multiplier");
 
+    if ((_size_data < 2) or (_size_data > 64))
+      test.error(toString(_("size_data (%d) 's valid range is 2 to 64.\n"),_size_data));
+
+    if (_delay > 1)
+      test.error(toString(_("delay must be set at 1\n")));
+
+    if (_latency > 32)
+      test.error(toString(_("latency's valid range is 0 to 32\n")));
+
     log_end(Multiplier,FUNCTION);
 
