Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Allocation.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Allocation.h	(revision 138)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Allocation.h	(revision 139)
@@ -413,5 +413,5 @@
     } while (0)
 
-#define ALLOC1_SIGNAL_IN( sig, name, type, size)                        \
+#define ALLOC1_SIGNAL_IN_COND( sig, name, type, size, cond)             \
   do                                                                    \
     {                                                                   \
@@ -419,16 +419,19 @@
       for (uint32_t it1=0; it1<iterator_1; it1++)                       \
         {                                                               \
-          if (size > 0)                                                 \
-            {                                                           \
-              sig [it1] = interface[it1]->set_signal_in <type> (name, size); \
-            }                                                           \
-          else                                                          \
-            {                                                           \
-              PRINT_SIZE_NUL(_component,interface[it1],name);           \
-            }                                                           \
-        }                                                               \
-    } while (0)
-
-#define ALLOC1_SIGNAL_OUT(sig, name, type, size)                        \
+          if (cond)                                                     \
+            {                                                           \
+              if (size > 0)                                             \
+                {                                                       \
+                  sig [it1] = interface[it1]->set_signal_in <type> (name, size); \
+                }                                                       \
+              else                                                      \
+                {                                                       \
+                  PRINT_SIZE_NUL(_component,interface[it1],name);       \
+                }                                                       \
+            }                                                           \
+        }                                                               \
+    } while (0)
+
+#define ALLOC1_SIGNAL_OUT_COND(sig, name, type, size, cond)             \
   do                                                                    \
     {                                                                   \
@@ -436,27 +439,38 @@
       for (uint32_t it1=0; it1<iterator_1; it1++)                       \
         {                                                               \
-          if (size > 0)                                                 \
-            {                                                           \
-              sig [it1] = interface[it1]->set_signal_out<type> (name, size); \
-            }                                                           \
-          else                                                          \
-            {                                                           \
-              PRINT_SIZE_NUL(_component,interface[it1],name);           \
-            }                                                           \
-        }                                                               \
-    } while (0)
-
-#define DELETE1_SIGNAL(sig, x1, size)                                   \
-  do                                                                    \
-    {                                                                   \
-      for (uint32_t it1=0; it1<x1; it1++)                               \
-        {                                                               \
-          if (size > 0)                                                 \
-            {                                                           \
-              delete sig[it1];                                          \
+          if (cond)                                                     \
+            {                                                           \
+              if (size > 0)                                             \
+                {                                                       \
+                  sig [it1] = interface[it1]->set_signal_out<type> (name, size); \
+                }                                                       \
+              else                                                      \
+                {                                                       \
+                  PRINT_SIZE_NUL(_component,interface[it1],name);       \
+                }                                                       \
+            }                                                           \
+        }                                                               \
+    } while (0)
+
+#define ALLOC1_SIGNAL_IN( sig, name, type, size) ALLOC1_SIGNAL_IN_COND( sig, name, type, size,true)
+#define ALLOC1_SIGNAL_OUT(sig, name, type, size) ALLOC1_SIGNAL_OUT_COND(sig, name, type, size,true)
+
+#define DELETE1_SIGNAL_COND(sig, x1, size, cond)                        \
+  do                                                                    \
+    {                                                                   \
+      for (uint32_t it1=0; it1<x1; it1++)                               \
+        {                                                               \
+          if (cond)                                                     \
+            {                                                           \
+              if (size > 0)                                             \
+                {                                                       \
+                  delete sig[it1];                                      \
+                }                                                       \
             }                                                           \
         }                                                               \
       delete [] sig;                                                    \
     } while (0)
+
+#define DELETE1_SIGNAL(sig, x1, size) DELETE1_SIGNAL_COND(sig, x1, size, true)
 
 #define ALLOC1_FOREIGN_SIGNAL_IN(sig, interface, name, type, size,x1)   \
@@ -661,5 +675,5 @@
     } while (0)
 
-#define _ALLOC2_SIGNAL_IN( sig, name, type, size, x1, x2)               \
+#define _ALLOC2_SIGNAL_IN_COND( sig, name, type, size, x1, x2, cond)    \
   do                                                                    \
     {                                                                   \
@@ -670,17 +684,20 @@
           for (uint32_t it2=0; it2<x2; it2++)                           \
             {                                                           \
-              if (size > 0)                                             \
-                {                                                       \
-                  sig [it1][it2] = interface[it1][it2]->set_signal_in <type> (name, size); \
-                }                                                       \
-              else                                                      \
-                {                                                       \
-                  PRINT_SIZE_NUL(_component,interface[it1][it2],name);  \
-                }                                                       \
-            }                                                           \
-        }                                                               \
-    } while (0)
-
-#define _ALLOC2_SIGNAL_OUT( sig, name, type, size, x1, x2)              \
+              if (cond)                                                 \
+                {                                                       \
+                  if (size > 0)                                         \
+                    {                                                   \
+                      sig [it1][it2] = interface[it1][it2]->set_signal_in <type> (name, size); \
+                    }                                                   \
+                  else                                                  \
+                    {                                                   \
+                      PRINT_SIZE_NUL(_component,interface[it1][it2],name); \
+                    }                                                   \
+                }                                                       \
+            }                                                           \
+        }                                                               \
+    } while (0)
+
+#define _ALLOC2_SIGNAL_OUT_COND( sig, name, type, size, x1, x2, cond)   \
   do                                                                    \
     {                                                                   \
@@ -691,33 +708,42 @@
           for (uint32_t it2=0; it2<x2; it2++)                           \
             {                                                           \
-              if (size > 0)                                             \
-                {                                                       \
-                  sig [it1][it2] = interface[it1][it2]->set_signal_out <type> (name, size); \
-                }                                                       \
-              else                                                      \
-                {                                                       \
-                  PRINT_SIZE_NUL(_component,interface[it1][it2],name);  \
-                }                                                       \
-            }                                                           \
-        }                                                               \
-    } while (0)
-
-#define ALLOC2_VAL_ACK_IN( sig, name, type      ) _ALLOC2_VAL_ACK_IN( sig, name, type      , iterator_1, iterator_2) 
-#define ALLOC2_VAL_ACK_OUT(sig, name, type      ) _ALLOC2_VAL_ACK_OUT(sig, name, type      , iterator_1, iterator_2) 
-#define ALLOC2_VALACK_IN(  sig,       type      ) _ALLOC2_VALACK_IN(  sig,       type      , iterator_1, iterator_2) 
-#define ALLOC2_VALACK_OUT( sig,       type      ) _ALLOC2_VALACK_OUT( sig,       type      , iterator_1, iterator_2) 
-#define ALLOC2_SIGNAL_IN(  sig, name, type, size) _ALLOC2_SIGNAL_IN(  sig, name, type, size, iterator_1, iterator_2) 
-#define ALLOC2_SIGNAL_OUT( sig, name, type, size) _ALLOC2_SIGNAL_OUT( sig, name, type, size, iterator_1, iterator_2) 
-
-#define DELETE2_SIGNAL(sig, x1,x2, size)                                \
-  do                                                                    \
-    {                                                                   \
-      for (uint32_t it1=0; it1<x1; it1++)                               \
-        {                                                               \
-          for (uint32_t it2=0; it2<x2; it2++)                           \
-            {                                                           \
-              if (size > 0)                                             \
-                {                                                       \
-                  delete sig[it1][it2];                                 \
+              if (cond)                                                 \
+                {                                                       \
+                  if (size > 0)                                         \
+                    {                                                   \
+                      sig [it1][it2] = interface[it1][it2]->set_signal_out <type> (name, size); \
+                    }                                                   \
+                  else                                                  \
+                    {                                                   \
+                      PRINT_SIZE_NUL(_component,interface[it1][it2],name); \
+                    }                                                   \
+                }                                                       \
+            }                                                           \
+        }                                                               \
+    } while (0)
+
+#define _ALLOC2_SIGNAL_IN( sig, name, type, size, x1, x2) _ALLOC2_SIGNAL_IN_COND( sig, name, type, size, x1, x2,true)
+#define _ALLOC2_SIGNAL_OUT(sig, name, type, size, x1, x2) _ALLOC2_SIGNAL_OUT_COND(sig, name, type, size, x1, x2,true)
+
+#define ALLOC2_VAL_ACK_IN( sig, name, type      )         _ALLOC2_VAL_ACK_IN( sig, name, type      , iterator_1, iterator_2) 
+#define ALLOC2_VAL_ACK_OUT(sig, name, type      )         _ALLOC2_VAL_ACK_OUT(sig, name, type      , iterator_1, iterator_2) 
+#define ALLOC2_VALACK_IN(  sig,       type      )         _ALLOC2_VALACK_IN(  sig,       type      , iterator_1, iterator_2) 
+#define ALLOC2_VALACK_OUT( sig,       type      )         _ALLOC2_VALACK_OUT( sig,       type      , iterator_1, iterator_2) 
+#define ALLOC2_SIGNAL_IN(  sig, name, type, size)         _ALLOC2_SIGNAL_IN(  sig, name, type, size, iterator_1, iterator_2) 
+#define ALLOC2_SIGNAL_OUT( sig, name, type, size)         _ALLOC2_SIGNAL_OUT( sig, name, type, size, iterator_1, iterator_2) 
+
+#define DELETE2_SIGNAL_COND(sig, x1,x2, size, cond)                     \
+  do                                                                    \
+    {                                                                   \
+      for (uint32_t it1=0; it1<x1; it1++)                               \
+        {                                                               \
+          for (uint32_t it2=0; it2<x2; it2++)                           \
+            {                                                           \
+              if (cond)                                                 \
+                {                                                       \
+                  if (size > 0)                                         \
+                    {                                                   \
+                      delete sig[it1][it2];                             \
+                    }                                                   \
                 }                                                       \
             }                                                           \
@@ -726,4 +752,6 @@
       delete [] sig;                                                    \
     } while (0)
+
+#define DELETE2_SIGNAL(sig, x1,x2, size) DELETE2_SIGNAL_COND(sig, x1,x2, size,true)
 
 #define ALLOC2_FOREIGN_SIGNAL_IN( sig, interface, name, type, size, x1, x2) \
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Component.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Component.h	(revision 138)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Component.h	(revision 139)
@@ -131,5 +131,5 @@
 
   public    : bool                  test_map          (bool recursive=true);
-  private   : bool                  test_map          (uint32_t depth, bool recursive);
+//private   : bool                  test_map          (bool recursive);
 
   public    : void *                get_sc_signal     (std::string component,
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Entity.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Entity.h	(revision 138)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Entity.h	(revision 139)
@@ -79,6 +79,6 @@
 #endif
 
-  public    : bool                  test_map          (uint32_t depth,bool top_level, bool is_behavioural);
-//   public    : bool                  test_equi         (uint32_t depth);
+  public    : bool                  test_map          (bool top_level, bool is_behavioural);
+//public    : bool                  test_equi         (uint32_t depth);
 
 #ifdef POSITION
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interface.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interface.h	(revision 138)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interface.h	(revision 139)
@@ -248,5 +248,7 @@
 #endif
 
-  public    : bool                  test_map             (uint32_t depth, bool top_level, bool is_behavioural);
+  public    : bool                  test_map             (std::string name_interfaces, 
+                                                          bool        top_level,
+                                                          bool        is_behavioural);
 //public    : bool                  test_equi            (uint32_t depth);
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interfaces.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interfaces.h	(revision 138)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interfaces.h	(revision 139)
@@ -80,6 +80,6 @@
 #endif
 
-  public    : bool                  test_map              (uint32_t depth, bool top_level, bool is_behavioural);
-//   public    : bool                  test_equi             (uint32_t depth);
+  public    : bool                  test_map              (bool top_level, bool is_behavioural);
+//public    : bool                  test_equi             (uint32_t depth);
 
   public    : friend std::ostream&       operator<<            (std::ostream& output_stream,
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Signal.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Signal.h	(revision 138)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Signal.h	(revision 139)
@@ -96,5 +96,7 @@
   public    : bool              presence_testbench      (void);
 
-  public    : bool              test_map                (uint32_t depth, bool top_level, bool is_behavioural);
+  public    : bool              test_map                (std::string name_interface,
+                                                         bool        top_level,
+                                                         bool        is_behavioural);
 //public    : bool              test_equi               (uint32_t depth);
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Stat.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Stat.h	(revision 138)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Stat.h	(revision 139)
@@ -37,5 +37,5 @@
     typedef struct 
     {
-      bool               each_cycle;
+//    bool               each_cycle;
       counter_t        * variable;
       Stat_binary_tree * expression;
@@ -54,5 +54,6 @@
     private: std::map<std::string, var_t> * _list_operand;
       // Liste chaîné des expressions
-    private: std::list<expr_t>            * _list_expr;
+    private: std::list<expr_t>            * _list_expr_per_cycle;
+    private: std::list<expr_t>            * _list_expr_per_period;
       // List chaîné des "counters" (seulement pour la désallocation)
     private: std::list<counters_t*>       * _list_counters;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Types.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Types.h	(revision 138)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Types.h	(revision 139)
@@ -120,4 +120,11 @@
     } Tmanage_event_t;
 
+  typedef enum
+    {
+      RAT_NO_SAVE     , // Rat without save
+      RAT_ONE_SAVE    , // Rat with one save
+      RAT_DEPTH_SAVE    // RAT with multiple save (depth)
+    } Trat_scheme_t;
+
   //--------------------------------------------------[ instruction ]-----
   class instruction_t
@@ -307,4 +314,32 @@
   };
 
+  template<> inline std::string toString<morpheo::behavioural::Trat_scheme_t>(const morpheo::behavioural::Trat_scheme_t& x)
+  {
+    switch (x)
+      {
+      case morpheo::behavioural::RAT_NO_SAVE    : return "rat_no_save"   ; break;
+      case morpheo::behavioural::RAT_ONE_SAVE   : return "rat_one_save"  ; break;
+      case morpheo::behavioural::RAT_DEPTH_SAVE : return "rat_depth_save"; break;
+      default    : return ""      ; break;
+      }
+  };
+
+  template<> inline morpheo::behavioural::Trat_scheme_t fromString<morpheo::behavioural::Trat_scheme_t>(const std::string& x)
+  {
+    if ((x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::RAT_NO_SAVE   ))) == 0) or
+        (x.compare(toString(                      morpheo::behavioural::RAT_NO_SAVE    )) == 0))
+      return morpheo::behavioural::RAT_NO_SAVE;
+
+    if ((x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::RAT_ONE_SAVE  ))) == 0) or
+        (x.compare(toString(                      morpheo::behavioural::RAT_ONE_SAVE   )) == 0))
+      return morpheo::behavioural::RAT_ONE_SAVE;
+
+    if ((x.compare(toString(static_cast<uint32_t>(morpheo::behavioural::RAT_DEPTH_SAVE))) == 0) or
+        (x.compare(toString(                      morpheo::behavioural::RAT_DEPTH_SAVE )) == 0))
+      return morpheo::behavioural::RAT_DEPTH_SAVE;
+
+    throw (ERRORMORPHEO ("fromString","Unknow string : \""+x+"\""));
+  };
+
 }; // end namespace morpheo              
 #endif
