Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Configuration_Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Configuration_Parameters.h	(revision 38)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Configuration_Parameters.h	(revision 40)
@@ -12,4 +12,5 @@
 #include <iostream>
 #include "Behavioural/include/XML.h"
+#include "Behavioural/include/Environnement.h"
 #include "Include/ErrorMorpheo.h"
 #include "Include/ToString.h"
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Environnement.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Environnement.h	(revision 38)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Environnement.h	(revision 40)
@@ -6,2 +6,6 @@
 #  error "To have the vhdl's test bench, you must set flags SYSTEMC"
 #endif
+
+#if (defined(VHDL_TESTBENCH) and not defined(VHDL))
+#  error "To have the vhdl's test bench, you must set flags VHDL"
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interface.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interface.h	(revision 38)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interface.h	(revision 40)
@@ -39,18 +39,21 @@
 
     // -----[ fields ]----------------------------------------------------
-  private   : const string          _name         ;
-  private   : const direction_t     _direction    ;
-  private   : const localisation_t  _localisation ;
-  private   :       string          _comment      ;
+  protected : const string          _name         ;
+  protected : const direction_t     _direction    ;
+  protected : const localisation_t  _localisation ;
+  protected :       string          _comment      ;
 
-  private   : list<Signal *>      * _list_signal  ;
-
+  protected : list<Signal *>      * _list_signal  ;
 
 #ifdef POSITION
-  private   :       bool            _is_map       ;
-  private   :       void          * _entity_map   ; // Entity -> erreur cyclique
-  private   :       void          * _interface_map; // pour être homogène avec _entity_map
+  protected :       bool            _is_map       ;
+  protected :       void          * _entity_map   ; // Entity -> erreur cyclique
+  protected :       void          * _interface_map; // pour être homogène avec _entity_map
 #endif
 
+#ifdef VHDL_TESTBENCH
+  private   : list<string>        * _list_cycle   ;
+#endif
+    
     // -----[ methods ]---------------------------------------------------
   public    :                       Interface            (string         name        ,
@@ -62,7 +65,11 @@
 
   public    : void                  set_comment          (string comment);
-  private   : string                get_comment          (void          );
+  protected : string                get_comment          (void          );
 
-  private   : string                get_signal           (void);
+  protected : string                signal_name          (string      name_interface,
+							  string      name_signal   ,
+							  direction_t direction     );
+
+  protected : string                get_signal           (void);
   public    : Signal *              set_signal           (string          name     ,
 							  direction_t     direction,
@@ -135,4 +142,5 @@
 
 #ifdef VHDL_TESTBENCH
+  public    : void                  testbench_cycle      (void);
   public    : void                  testbench            (Vhdl_Testbench * & vhdl_testbench);
 #endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interface_fifo.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interface_fifo.h	(revision 40)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interface_fifo.h	(revision 40)
@@ -0,0 +1,82 @@
+#ifndef morpheo_behavioural_Interface_fifo_h
+#define morpheo_behavioural_Interface_fifo_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Interface.h"
+
+namespace morpheo              {
+namespace behavioural          {
+
+  typedef enum {VAL, ACK} val_ack_t;
+
+  class Interface_fifo : public Interface
+  {
+  private   : list<Signal *>      * _list_signal_val;
+  private   : list<Signal *>      * _list_signal_ack;
+
+#ifdef VHDL_TESTBENCH
+  private   : bool                  _test_exhaustive;
+#endif
+
+   // -----[ methods ]---------------------------------------------------
+  public    :                       Interface_fifo       (string         name        ,
+							  direction_t    direction   ,
+							  localisation_t localisation);
+    
+  public    :                       Interface_fifo       (const Interface_fifo & interface_fifo);
+  public    :                       ~Interface_fifo      ();
+
+  public    : Signal *              set_signal_valack    (string          name     ,
+							  direction_t     direction,
+							  val_ack_t       val_ack  ,
+							  presence_port_t presence_port = PORT_VHDL_YES_TESTBENCH_YES);
+
+  private   : void                  save_ptr             (Signal *        signal   ,
+							  val_ack_t       val_ack  );
+
+#ifdef SYSTEMC
+  public    : sc_in <bool> *        set_signal_valack_in (string          name     ,
+							  val_ack_t       val_ack  ,
+							  presence_port_t presence_port=PORT_VHDL_YES_TESTBENCH_YES)
+    {
+      log_printf(FUNC,Behavioural,"set_signal_valack_in","Begin");
+
+      sc_in <bool> * port = set_signal_in <bool> (name, 1, presence_port);
+      
+      save_ptr(_list_signal->back(), val_ack);
+      
+      log_printf(FUNC,Behavioural,"set_signal_valack_in","End");
+      return port;
+    };
+
+  public    : sc_out<bool> *        set_signal_valack_out(string          name     ,
+							  val_ack_t       val_ack  ,
+							  presence_port_t presence_port=PORT_VHDL_YES_TESTBENCH_YES)
+    {
+      log_printf(FUNC,Behavioural,"set_signal_valack_out","Begin");
+
+      sc_out<bool> * port = set_signal_out<bool> (name, 1, presence_port);
+      
+      save_ptr(_list_signal->back(), val_ack);
+      
+      log_printf(FUNC,Behavioural,"set_signal_valack_out","End");
+      return port;
+    };
+#endif
+
+#ifdef VHDL_TESTBENCH
+  public    : bool                  testbench_transaction(void);
+  public    : void                  testbench            (Vhdl_Testbench * & vhdl_testbench);
+#endif
+  };
+
+}; // end namespace behavioural          
+}; // end namespace morpheo              
+
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interfaces.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interfaces.h	(revision 38)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interfaces.h	(revision 40)
@@ -12,5 +12,5 @@
 #include <iostream>
 #include <list>
-#include "Behavioural/include/Interface.h"
+#include "Behavioural/include/Interface_fifo.h"
 #include "Include/ToString.h"
 #include "Include/Debug.h"
@@ -30,5 +30,5 @@
   {
     // -----[ fields ]----------------------------------------------------
-  private   : list<Interface*>    * _list_interface;
+  private   : list<Interface_fifo*>    * _list_interface;
 
     // -----[ methods ]---------------------------------------------------
@@ -37,8 +37,8 @@
   public    :                       ~Interfaces           ();
 
-  public    : Interface *           set_interface         (string         name        ,
+  public    : Interface_fifo *      set_interface         (string         name        ,
 							   direction_t    direction   ,
 							   localisation_t localisation);
-  public    : Interface *           set_interface         (string         name        ,
+  public    : Interface_fifo *      set_interface         (string         name        ,
 							   direction_t    direction   ,
 							   localisation_t localisation,
@@ -53,5 +53,5 @@
 #endif
 
-  public    : Interface  *          find_interface        (string name);
+  public    : Interface_fifo  *     find_interface        (string name);
 
 #ifdef VHDL_TESTBENCH
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Signal.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Signal.h	(revision 38)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Signal.h	(revision 40)
@@ -23,4 +23,5 @@
 #include "Behavioural/include/XML.h"
 #include "Include/ErrorMorpheo.h"
+#include "Include/ToBase2.h"
 #include "Include/ToString.h"
 #include "Include/Debug.h"
@@ -56,4 +57,6 @@
   private   : void *                _signal       ;
   private   : type_info_t           _type_info    ;
+
+  private   : list<string>        * _list_value   ;
 #endif
 
@@ -67,4 +70,43 @@
 
 #ifdef VHDL_TESTBENCH
+  public    :template <typename T>
+             T                  read (void)
+    {
+      switch (_direction)
+	{
+	case IN  : {return read_in  <T>();}
+	case OUT : {return read_out <T>();}
+	default  : throw (ErrorMorpheo ("Signal \""+_name+"\" : direction unknow."));
+	}
+    }
+
+  public    :template <typename T>
+             T                  read_in (void)
+    {
+      switch (_type_info)
+	{
+	case BOOL     : return (static_cast<sc_in  <bool    > *>(_signal)->read()); 
+	case UINT8_T  : return (static_cast<sc_in  <uint8_t > *>(_signal)->read()); 
+	case UINT16_T : return (static_cast<sc_in  <uint16_t> *>(_signal)->read());
+	case UINT32_T : return (static_cast<sc_in  <uint32_t> *>(_signal)->read()); 
+	case UINT64_T : return (static_cast<sc_in  <uint64_t> *>(_signal)->read()); 
+	default       : throw (ErrorMorpheo ("Signal \""+_name+"\" : type unknow."));
+	}
+    }
+
+  public    :template <typename T>
+             T                  read_out(void)
+    {
+      switch (_type_info)
+	{
+	case BOOL     : return (static_cast<sc_out <bool    > *>(_signal)->read()); 
+	case UINT8_T  : return (static_cast<sc_out <uint8_t > *>(_signal)->read()); 
+	case UINT16_T : return (static_cast<sc_out <uint16_t> *>(_signal)->read());
+	case UINT32_T : return (static_cast<sc_out <uint32_t> *>(_signal)->read()); 
+	case UINT64_T : return (static_cast<sc_out <uint64_t> *>(_signal)->read()); 
+	default       : throw (ErrorMorpheo ("Signal \""+_name+"\" : type unknow."));
+	}
+    }
+
   public    : void              testbench       (Vhdl_Testbench * & vhdl_testbench);
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Statistics.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Statistics.h	(revision 38)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Statistics.h	(revision 40)
@@ -13,4 +13,5 @@
 #include <stdint.h>
 #include <iostream>
+#include "Behavioural/include/Environnement.h"
 #include "Behavioural/include/Parameters_Statistics.h"
 #include "Include/Average.h"
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Vhdl.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Vhdl.h	(revision 38)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Vhdl.h	(revision 40)
@@ -14,4 +14,5 @@
 #include <iostream>
 #include <list>
+#include "Behavioural/include/Environnement.h"
 #include "Behavioural/include/Direction.h"
 #include "Include/ToString.h"
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Vhdl_Testbench.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Vhdl_Testbench.h	(revision 38)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Vhdl_Testbench.h	(revision 40)
@@ -11,4 +11,5 @@
  */
 
+#include "Behavioural/include/Environnement.h"
 #include "Behavioural/include/Vhdl.h"
 #include "Include/ToString.h"
@@ -39,4 +40,6 @@
     // -----[ fields ]----------------------------------------------------
   private   : const string     _name       ;
+  private   : const bool       _exhaustive ;
+
   private   : string           _clock_name ;
   private   : uint32_t         _num_cycle  ;
@@ -48,7 +51,9 @@
   private   : list<string>     _list_input_cycle;
   private   : list<uint32_t>   _list_input_size ;
+
   private   : list<string>     _list_output;
   private   : list<string>     _list_output_cycle;
   private   : list<uint32_t>   _list_output_size ;
+
   private   : list<bool>       _list_test;
   private   : list<string>     _list_port;
@@ -61,5 +66,6 @@
     
     // -----[ methods ]---------------------------------------------------
-  public    :                  Vhdl_Testbench              (string   name);
+  public    :                  Vhdl_Testbench              (string   name,
+							    bool     exhaustive=true);
   public    : virtual          ~Vhdl_Testbench             ();
 						           
