Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_interface_map.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_interface_map.cpp	(revision 43)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_interface_map.cpp	(revision 44)
@@ -27,5 +27,5 @@
 
     if (entity_dest == NULL)
-      throw (ErrorMorpheo ("Component \""+name_entity+"\", port map with unknow component \""+component_dest+"\"."));
+      throw (ErrorMorpheo ("<Component::interface_map> Component \""+name_entity+"\", port map with unknow component \""+component_dest+"\"."));
 
     bool is_top_level_dest = (name_entity == component_dest);
@@ -34,5 +34,5 @@
     
     if (interface_dest == NULL)
-      throw (ErrorMorpheo ("Component \""+name_entity+"\", port map with component \""+component_dest+"\" and a unknow interface \""+port_dest+"\"."));
+      throw (ErrorMorpheo ("<Component::interface_map> Component \""+name_entity+"\", port map with component \""+component_dest+"\" and a unknow interface \""+port_dest+"\"."));
 
     // Second entity
@@ -40,5 +40,5 @@
 
     if (entity_src == NULL)
-      throw (ErrorMorpheo ("Component \""+name_entity+"\", port map with unknow component \""+component_src+"\"."));
+      throw (ErrorMorpheo ("<Component::interface_map> Component \""+name_entity+"\", port map with unknow component \""+component_src+"\"."));
 
     bool is_top_level_src = (name_entity == component_src);
@@ -47,5 +47,5 @@
 
     if (interface_src == NULL)
-      throw (ErrorMorpheo ("Component \""+name_entity+"\", port map with component \""+component_src+"\" and a unknow interface \""+port_src+"\"."));
+      throw (ErrorMorpheo ("<Component::interface_map> Component \""+name_entity+"\", port map with component \""+component_src+"\" and a unknow interface \""+port_src+"\"."));
 
     // all is ok - link
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_port_map.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_port_map.cpp	(revision 43)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_port_map.cpp	(revision 44)
@@ -45,8 +45,11 @@
 
     // If all is ok, mapping
-    
-    //cout << " - " << entity_src->get_name() << "("<< signal_src->get_name() << ")" << "\t-> " << entity_dest->get_name() << "(" << signal_dest->get_name() << ")" << endl;
+    log_printf(TRACE,Behavioural,FUNCTION, "Signal \"%s.%s\"\tlink with \"%s.%s\""
+	       ,entity_src ->get_name().c_str()
+	       ,signal_src ->get_name().c_str()
+	       ,entity_dest->get_name().c_str()
+	       ,signal_dest->get_name().c_str());
 
-    signal_src ->link   (signal_dest);
+    signal_src ->link   (signal_dest, entity_dest == _entity);
     //signal_dest->mapping(signal_src );
     
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_vhdl_instance.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_vhdl_instance.cpp	(revision 43)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_vhdl_instance.cpp	(revision 44)
@@ -20,4 +20,55 @@
     uint32_t             cpt = 0;
     map<Signal *,string> tab;
+
+    // buffer all output
+    {
+      vhdl->set_body ("------------------------------------------------------");
+      vhdl->set_body ("-- Output's Buffer");
+      vhdl->set_body ("------------------------------------------------------");
+
+      // for each interface
+      list<Interface_fifo *>         * list_interface = (_entity)->get_interfaces_list()->get_interface_list();
+      list<Interface_fifo *>::iterator j              = list_interface->begin();
+      if (not list_interface->empty())
+	{
+	  while (j != list_interface->end())
+	    {
+	      // for each signal
+	      list<Signal *>         * list_signal = (*j)->get_signal_list();
+	      list<Signal *>::iterator k           = list_signal->begin();
+	      if (not list_signal->empty())
+		{
+		  while (k != list_signal->end())
+		    {
+		      Signal * signal = (*k);
+
+		      // test if is connect with external interface or with an another component AND if this port is mapped. 
+		      if ( (signal->get_direction() == OUT) and
+			   (signal->get_connect_from_signal () != NULL) )
+			{
+			  // Create name
+			  string signal_name = "signal_"+toString(cpt++);
+			  
+			  tab [signal                           ] = signal_name;
+			  tab [signal->get_connect_from_signal()] = signal_name;
+			  
+			  // Add a new signal and the affectation
+			  vhdl->set_signal (signal_name, signal->get_size());
+			  vhdl->set_body   (signal->get_name()+" <= "+signal_name+";");
+			}
+		      else
+			{
+			  tab [signal                   ] = signal->get_name();
+			}
+		      ++k;
+		    }
+		}
+	      ++j;
+	    }
+	}
+      vhdl->set_body ("");
+      vhdl->set_body ("------------------------------------------------------");
+      vhdl->set_body ("");
+    }
 
     vhdl->set_library_work (_entity->get_name() + "_Pack");
@@ -50,15 +101,17 @@
 			    // test if is connect with external interface or with an another component.
 			    Signal * signal_src  = (*k);
+
 			    if (signal_src->presence_vhdl () == true)
 			      {
-				Signal * signal_dest = (*k)->get_signal_link();
+				Signal * signal_dest = signal_src->get_connect_to_signal();
 				string   name_src    = signal_src->get_name();
 				string   name_dest;
 				
-				if (_entity->find_signal(signal_dest) == false)
-				  {
+// 				// Test if destination signal is a interface port ?
+// 				if (_entity->find_signal(signal_dest) == false)
+// 				  {
 				    // find if signal is already link
-				    map<Signal *,string>::iterator it = tab.find(signal_src); 
-				    if (tab.find(signal_src) == tab.end())
+				    map<Signal *,string>::iterator it = tab.find(signal_dest); 
+				    if (tab.find(signal_dest) == tab.end())
 				      {
 					// Create name
@@ -72,8 +125,28 @@
 				      }
 				    else
-				      name_dest = (*it).second;
-				  }
-				else
-				  name_dest = signal_dest->get_name();
+				      {
+					// find !!!!
+					name_dest = (*it).second;
+					tab [signal_src ] = name_dest;
+				      }
+// 				  }
+// 				else
+// 				  {
+// 				    cout << "Kane à dit : " << signal_dest->get_name() << endl;
+// 				    // Test if output
+// 				    if (signal_dest->get_direction() == OUT)
+// 				      {
+// 					// Take buffer's signal
+// 					map<Signal *,string>::iterator it = tab.find(signal_dest);
+// 					name_dest        = (*it).second;
+
+// 					cout << " * OUT - name : " << name_dest << endl;
+// 				      }
+// 				    else
+// 				      {
+// 					name_dest = signal_dest->get_name();
+// 					cout << " * IN  - name : " << name_dest << endl;
+// 				      }				    
+// 				  }
 				
 				vhdl->set_body_component_port_map (list_port_map, name_src, name_dest);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_signal_name.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_signal_name.cpp	(revision 43)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_signal_name.cpp	(revision 44)
@@ -7,5 +7,5 @@
 
 #include "Behavioural/include/Interface.h"
-#include "Include/ChangeCase.h"
+#include "Common/include/ChangeCase.h"
 
 namespace morpheo              {
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interfaces_testbench_generate_file.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interfaces_testbench_generate_file.cpp	(revision 43)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interfaces_testbench_generate_file.cpp	(revision 44)
@@ -87,5 +87,5 @@
     vhdl->set_body("\t\t\t"+counter+" <= "+counter+"+1;");
     vhdl->set_body("");
-    vhdl->set_body("\t\t\tassert not ("+counter+" = "+toString(cycle)+") report \"Test OK\" severity FAILURE;");
+    vhdl->set_body("\t\t\tassert not ("+counter+" >= "+toString(cycle)+") report \"Test OK\" severity FAILURE;");
     vhdl->set_body("\t\t\tassert not ("+test_name+" = '0') report \"Test KO\" severity FAILURE;");
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal.cpp	(revision 43)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal.cpp	(revision 44)
@@ -23,5 +23,6 @@
     _is_allocate   = false;
     _is_map        = false;
-    _signal        = NULL;
+    _connect_from_signal = NULL;
+    _connect_to_signal   = NULL;
     _sc_signal     = NULL;
     _sc_signal_map = NULL;
@@ -42,4 +43,6 @@
     _is_allocate= signal._is_allocate;
     _is_map     = signal._is_map    ;
+    _connect_from_signal = signal._connect_from_signal;
+    _connect_to_signal   = signal._connect_to_signal;
     _sc_signal     = signal._sc_signal    ;
     _sc_signal_map = signal._sc_signal_map;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_get_connect_from_signal.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_get_connect_from_signal.cpp	(revision 44)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_get_connect_from_signal.cpp	(revision 44)
@@ -0,0 +1,26 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Signal.h"
+
+
+namespace morpheo              {
+namespace behavioural          {
+
+#undef  FUNCTION
+#define FUNCTION "Signal::get_connect_from_signal"
+  Signal * Signal::get_connect_from_signal (void)
+  {
+    log_printf(FUNC,Behavioural,FUNCTION,"Begin");
+    Signal * _return = _connect_from_signal;
+    log_printf(FUNC,Behavioural,FUNCTION,"End");
+
+    return _return;
+  };
+
+}; // end namespace behavioural          
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_get_connect_to_signal.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_get_connect_to_signal.cpp	(revision 44)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_get_connect_to_signal.cpp	(revision 44)
@@ -0,0 +1,26 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Signal.h"
+
+
+namespace morpheo              {
+namespace behavioural          {
+
+#undef  FUNCTION
+#define FUNCTION "Signal::get_connect_to_signal"
+  Signal * Signal::get_connect_to_signal (void)
+  {
+    log_printf(FUNC,Behavioural,FUNCTION,"Begin");
+    Signal * _return = _connect_to_signal;
+    log_printf(FUNC,Behavioural,FUNCTION,"End");
+
+    return _return;
+  };
+
+}; // end namespace behavioural          
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_get_direction.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_get_direction.cpp	(revision 44)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_get_direction.cpp	(revision 44)
@@ -0,0 +1,26 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Signal.h"
+
+
+namespace morpheo              {
+namespace behavioural          {
+
+#undef  FUNCTION
+#define FUNCTION "Signal::get_direction"
+  direction_t Signal::get_direction (void)
+  {
+    log_printf(FUNC,Behavioural,FUNCTION,"Begin");
+    direction_t _return = _direction;
+    log_printf(FUNC,Behavioural,FUNCTION,"End");
+
+    return _return;
+  };
+
+}; // end namespace behavioural          
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_get_is_map.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_get_is_map.cpp	(revision 44)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_get_is_map.cpp	(revision 44)
@@ -0,0 +1,26 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Signal.h"
+
+
+namespace morpheo              {
+namespace behavioural          {
+
+#undef  FUNCTION
+#define FUNCTION "Signal::get_is_map"
+  bool Signal::get_is_map (void)
+  {
+    log_printf(FUNC,Behavioural,FUNCTION,"Begin");
+    uint32_t _return = _is_map;
+    log_printf(FUNC,Behavioural,FUNCTION,"End");
+
+    return _return;
+  };
+
+}; // end namespace behavioural          
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_get_signal_link.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_get_signal_link.cpp	(revision 43)
+++ 	(revision )
@@ -1,26 +1,0 @@
-/*
- * $Id$
- *
- * [ Description ]
- * 
- */
-
-#include "Behavioural/include/Signal.h"
-
-
-namespace morpheo              {
-namespace behavioural          {
-
-#undef  FUNCTION
-#define FUNCTION "Signal::get_signal_link"
-  Signal * Signal::get_signal_link (void)
-  {
-    log_printf(FUNC,Behavioural,FUNCTION,"Begin");
-    Signal * _return = _signal;
-    log_printf(FUNC,Behavioural,FUNCTION,"End");
-
-    return _return;
-  };
-
-}; // end namespace behavioural          
-}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_link.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_link.cpp	(revision 43)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_link.cpp	(revision 44)
@@ -14,65 +14,109 @@
 #undef  FUNCTION
 #define FUNCTION "Signal::link"
-  void Signal::link (Signal * signal)
+  void Signal::link (Signal * signal,
+		     bool     is_port_component)
   {
     log_printf(FUNC,Behavioural,FUNCTION,"Begin");
 
     if (        _is_allocate == false)
-      throw (ErrorMorpheo ("Signal \""+_name+"\", can't map with signal \""+        get_name()+"\", because it's not already allocate."));
+      throw (ErrorMorpheo ("<Signal::link> Signal \""+_name+"\", can't map with signal \""+        get_name()+"\", because it's not already allocate."));
     if (signal->_is_allocate == false)
-      throw (ErrorMorpheo ("Signal \""+_name+"\", can't map with signal \""+signal->get_name()+"\", because it's not already allocate."));
+      throw (ErrorMorpheo ("<Signal::link> Signal \""+_name+"\", can't map with signal \""+signal->get_name()+"\", because it's not already allocate."));
+    if (_is_map == true)
+      throw (ErrorMorpheo ("<Signal::mapping> Can't mapping signal \""+_name+"\" with \""+signal->get_name()+"\", because it's already map."));
     
-    _signal = signal;
 
-    if ((_direction == IN ) and (signal->_direction == IN ))
-      switch (_type_info)
-	{
-	case BOOL     : {(*(static_cast<sc_in  <bool    > *>(_sc_signal))) (*(static_cast<sc_in  <bool    > *>(signal->_sc_signal))); break;}
-	case UINT8_T  : {(*(static_cast<sc_in  <uint8_t > *>(_sc_signal))) (*(static_cast<sc_in  <uint8_t > *>(signal->_sc_signal))); break;}
-	case UINT16_T : {(*(static_cast<sc_in  <uint16_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint16_t> *>(signal->_sc_signal))); break;}
-	case UINT32_T : {(*(static_cast<sc_in  <uint32_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint32_t> *>(signal->_sc_signal))); break;}
-	case UINT64_T : {(*(static_cast<sc_in  <uint64_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint64_t> *>(signal->_sc_signal))); break;}
-	default       : {throw (ErrorMorpheo ("Signal \""+_name+"\" : type unknow.")); break;}
-	}
-    else
-      if ((_direction == OUT) and (signal->_direction == OUT))
-	{
-	  signal->_sc_signal_map = _sc_signal_map;
+    // List of all case
+    //
+    //       dest        src             dest        src
+    // PORT {IN } ----- {SIG} COMBI
+    // PORT {OUT} ----- {SIG} COMBI
+    //
+    // PORT {IN } --X-- {OUT} COMPONENT {IN } ----- {OUT} COMPONENT
+    // PORT {IN } ----- {IN } COMPONENT {IN } --X-- {IN } COMPONENT
+    // PORT {OUT} ----- {OUT} COMPONENT {OUT} --X-- {OUT} COMPONENT
+    // PORT {OUT} --X-- {IN } COMPONENT {OUT} ----- {IN } COMPONENT
 
-	  switch (_type_info)
-	    {
-	    case BOOL     : {(*(static_cast<sc_out <bool    > *>(_sc_signal))) (*(static_cast<sc_out <bool    > *>(signal->_sc_signal))); break;} 
-	    case UINT8_T  : {(*(static_cast<sc_out <uint8_t > *>(_sc_signal))) (*(static_cast<sc_out <uint8_t > *>(signal->_sc_signal))); break;} 
-	    case UINT16_T : {(*(static_cast<sc_out <uint16_t> *>(_sc_signal))) (*(static_cast<sc_out <uint16_t> *>(signal->_sc_signal))); break;}
-	    case UINT32_T : {(*(static_cast<sc_out <uint32_t> *>(_sc_signal))) (*(static_cast<sc_out <uint32_t> *>(signal->_sc_signal))); break;} 
-	    case UINT64_T : {(*(static_cast<sc_out <uint64_t> *>(_sc_signal))) (*(static_cast<sc_out <uint64_t> *>(signal->_sc_signal))); break;} 
-	    default       : {throw (ErrorMorpheo ("Signal \""+_name+"\" : type unknow.")); break;}
-	    }
-	}
-      else
-	if ((_direction == IN ) and (signal->_direction == OUT))
-	  switch (_type_info)
-	    {
-	    case BOOL     : {(*(static_cast<sc_in  <bool    > *>(_sc_signal))) (*(static_cast<sc_out <bool    > *>(signal->_sc_signal))); break;}
-	    case UINT8_T  : {(*(static_cast<sc_in  <uint8_t > *>(_sc_signal))) (*(static_cast<sc_out <uint8_t > *>(signal->_sc_signal))); break;}
-	    case UINT16_T : {(*(static_cast<sc_in  <uint16_t> *>(_sc_signal))) (*(static_cast<sc_out <uint16_t> *>(signal->_sc_signal))); break;}
-	    case UINT32_T : {(*(static_cast<sc_in  <uint32_t> *>(_sc_signal))) (*(static_cast<sc_out <uint32_t> *>(signal->_sc_signal))); break;}
-	    case UINT64_T : {(*(static_cast<sc_in  <uint64_t> *>(_sc_signal))) (*(static_cast<sc_out <uint64_t> *>(signal->_sc_signal))); break;}
-	    default       : {throw (ErrorMorpheo ("Signal \""+_name+"\" : type unknow.")); break;}
-	    }
-	else
-	  if ((_direction == OUT) and (signal->_direction == IN ))
+//  log_printf(TRACE,Behavioural,FUNCTION, "Signal \"%s\"\tlink with \"%s\"", _name.c_str(), signal->get_name().c_str());
+
+    log_printf(TRACE,Behavioural,FUNCTION, " * sc_signal (before) %.8x - %.8x", (uint32_t)(_sc_signal_map), (uint32_t)(signal->_sc_signal_map));
+
+    _connect_to_signal = signal;
+    signal->_connect_from_signal = this;
+
+    if (is_port_component == true)
+      {
+	if ((_direction == IN ) and (signal->_direction == IN ))
+	  {
 	    switch (_type_info)
 	      {
-	      case BOOL     : {(*(static_cast<sc_out <bool    > *>(_sc_signal))) (*(static_cast<sc_in  <bool    > *>(signal->_sc_signal))); break;}
-	      case UINT8_T  : {(*(static_cast<sc_out <uint8_t > *>(_sc_signal))) (*(static_cast<sc_in  <uint8_t > *>(signal->_sc_signal))); break;}
-	      case UINT16_T : {(*(static_cast<sc_out <uint16_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint16_t> *>(signal->_sc_signal))); break;}
-	      case UINT32_T : {(*(static_cast<sc_out <uint32_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint32_t> *>(signal->_sc_signal))); break;}
-	      case UINT64_T : {(*(static_cast<sc_out <uint64_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint64_t> *>(signal->_sc_signal))); break;}
-	      default       : {throw (ErrorMorpheo ("Signal \""+_name+"\" : type unknow.")); break;}
+	      case BOOL     : {(*(static_cast<sc_in  <bool    > *>(_sc_signal))) (*(static_cast<sc_in  <bool    > *>(signal->_sc_signal))); break;}
+	      case UINT8_T  : {(*(static_cast<sc_in  <uint8_t > *>(_sc_signal))) (*(static_cast<sc_in  <uint8_t > *>(signal->_sc_signal))); break;}
+	      case UINT16_T : {(*(static_cast<sc_in  <uint16_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint16_t> *>(signal->_sc_signal))); break;}
+	      case UINT32_T : {(*(static_cast<sc_in  <uint32_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint32_t> *>(signal->_sc_signal))); break;}
+	      case UINT64_T : {(*(static_cast<sc_in  <uint64_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint64_t> *>(signal->_sc_signal))); break;}
+	      default       : {throw (ErrorMorpheo ("<Signal::link> Signal \""+_name+"\" : type unknow.")); break;}
 	      }
-	  else
-	    throw (ErrorMorpheo ("Signal \""+_name+"\" : unsupported direction to link."));
+	  }
+	else
+	  {
+	    if ((_direction == OUT) and (signal->_direction == OUT))
+	      {
+		_is_map = true;
+		signal->_sc_signal_map = _sc_signal_map;
+		
+		switch (_type_info)
+		  {
+		  case BOOL     : {(*(static_cast<sc_out <bool    > *>(_sc_signal))) (*(static_cast<sc_out <bool    > *>(signal->_sc_signal))); break;} 
+		  case UINT8_T  : {(*(static_cast<sc_out <uint8_t > *>(_sc_signal))) (*(static_cast<sc_out <uint8_t > *>(signal->_sc_signal))); break;} 
+		  case UINT16_T : {(*(static_cast<sc_out <uint16_t> *>(_sc_signal))) (*(static_cast<sc_out <uint16_t> *>(signal->_sc_signal))); break;}
+		  case UINT32_T : {(*(static_cast<sc_out <uint32_t> *>(_sc_signal))) (*(static_cast<sc_out <uint32_t> *>(signal->_sc_signal))); break;} 
+		  case UINT64_T : {(*(static_cast<sc_out <uint64_t> *>(_sc_signal))) (*(static_cast<sc_out <uint64_t> *>(signal->_sc_signal))); break;} 
+		  default       : {throw (ErrorMorpheo ("<Signal::link> Signal \""+_name+"\" : type unknow.")); break;}
+		  }
+	      }
+	    else
+	      {
+		throw (ErrorMorpheo ("<Signal::link> Signal \""+_name+"\" can't been linked with signal \""+signal->get_name()+"\" : between two components, illegal direction ("+toString(_direction)+" with "+toString(signal->_direction)+")."));
+	      }
+	  }
+      }
+    else
+      {
+	if ((_direction == IN ) and (signal->_direction == OUT))
+	  {
+	    switch (_type_info)
+	      {
+	      case BOOL     : {(*(static_cast<sc_in  <bool    > *>(_sc_signal))) (*(static_cast<sc_out <bool    > *>(signal->_sc_signal))); break;}
+	      case UINT8_T  : {(*(static_cast<sc_in  <uint8_t > *>(_sc_signal))) (*(static_cast<sc_out <uint8_t > *>(signal->_sc_signal))); break;}
+	      case UINT16_T : {(*(static_cast<sc_in  <uint16_t> *>(_sc_signal))) (*(static_cast<sc_out <uint16_t> *>(signal->_sc_signal))); break;}
+	      case UINT32_T : {(*(static_cast<sc_in  <uint32_t> *>(_sc_signal))) (*(static_cast<sc_out <uint32_t> *>(signal->_sc_signal))); break;}
+	      case UINT64_T : {(*(static_cast<sc_in  <uint64_t> *>(_sc_signal))) (*(static_cast<sc_out <uint64_t> *>(signal->_sc_signal))); break;}
+	      default       : {throw (ErrorMorpheo ("<Signal::link> Signal \""+_name+"\" : type unknow.")); break;}
+	      }
+	  }
+	else
+	  {
+	    if ((_direction == OUT) and (signal->_direction == IN ))
+	      {
+		_is_map = true;
+		switch (_type_info)
+		  {
+		  case BOOL     : {(*(static_cast<sc_out <bool    > *>(_sc_signal))) (*(static_cast<sc_in  <bool    > *>(signal->_sc_signal))); break;}
+		  case UINT8_T  : {(*(static_cast<sc_out <uint8_t > *>(_sc_signal))) (*(static_cast<sc_in  <uint8_t > *>(signal->_sc_signal))); break;}
+		  case UINT16_T : {(*(static_cast<sc_out <uint16_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint16_t> *>(signal->_sc_signal))); break;}
+		  case UINT32_T : {(*(static_cast<sc_out <uint32_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint32_t> *>(signal->_sc_signal))); break;}
+		  case UINT64_T : {(*(static_cast<sc_out <uint64_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint64_t> *>(signal->_sc_signal))); break;}
+		  default       : {throw (ErrorMorpheo ("<Signal::link> Signal \""+_name+"\" : type unknow.")); break;}
+		  }
+	      }
+	    else
+	      {
+		throw (ErrorMorpheo ("<Signal::link> Signal \""+_name+"\" can't been linked with signal \""+signal->get_name()+"\" : between a interface's port and one component, illegal direction ("+toString(_direction)+" with "+toString(signal->_direction)+")."));
+	      }
+	  }
+      }
 
+    log_printf(TRACE,Behavioural,FUNCTION, " * sc_signal (after ) %.8x - %.8x", (uint32_t)(_sc_signal_map), (uint32_t)(signal->_sc_signal_map));
     log_printf(FUNC,Behavioural,FUNCTION,"End");
   };
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_mapping.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_mapping.cpp	(revision 43)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_mapping.cpp	(revision 44)
@@ -12,27 +12,27 @@
 namespace behavioural          {
 
-#undef  FUNCTION
-#define FUNCTION "Signal::mapping"
-  void Signal::mapping (Signal * signal)
-  {
-    log_printf(FUNC,Behavioural,FUNCTION,"Begin");
+// #undef  FUNCTION
+// #define FUNCTION "Signal::mapping"
+//   void Signal::mapping (Signal * signal)
+//   {
+//     log_printf(FUNC,Behavioural,FUNCTION,"Begin");
 
-    if (_is_map == true)
-      throw (ErrorMorpheo ("<Signal::mapping> Can't mapping signal \""+_name+"\" with \""+signal->get_name()+"\", because it's already map."));
+//     if (_is_map == true)
+//       throw (ErrorMorpheo ("<Signal::mapping> Can't mapping signal \""+_name+"\" with \""+signal->get_name()+"\", because it's already map."));
     
-    if (signal->_is_allocate == false)
-      throw (ErrorMorpheo ("<Signal::mapping> Signal \""+_name+"\", can't map with signal \""+signal->get_name()+"\", because it's not already allocate."));
+//     if (signal->_is_allocate == false)
+//       throw (ErrorMorpheo ("<Signal::mapping> Signal \""+_name+"\", can't map with signal \""+signal->get_name()+"\", because it's not already allocate."));
 
-    if (_direction == OUT)
-      {
-	// This output is mapped
-	_is_map     = true;
+//     if (_direction == OUT)
+//       {
+// 	// This output is mapped
+// 	_is_map     = true;
 
-	if (signal->_direction == OUT)
-	  _sc_signal_map = signal->_sc_signal_map;
-      }
+// 	if (signal->_direction == OUT)
+// 	  _sc_signal_map = signal->_sc_signal_map;
+//       }
     
-    log_printf(FUNC,Behavioural,FUNCTION,"End");
-  };
+//     log_printf(FUNC,Behavioural,FUNCTION,"End");
+//   };
 
 }; // end namespace behavioural          
