Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Allocation.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Allocation.h	(revision 75)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Allocation.h	(revision 76)
@@ -41,11 +41,13 @@
   }									
 #define ALLOC_SIGNAL_IN(  sig, name, type, size)			\
-  {									\
-    sig = interface->set_signal_in <type> (name, size);			\
-  }									
+  if (size > 0)								\
+    {									\
+      sig = interface->set_signal_in <type> (name, size);		\
+    }									
 #define ALLOC_SIGNAL_OUT( sig, name, type, size)			\
-  {									\
-    sig = interface->set_signal_out<type> (name, size);			\
-  }
+  if (size > 0)								\
+    {									\
+      sig = interface->set_signal_out<type> (name, size);		\
+    }
 
 #define ALLOC_SC_SIGNAL(  sig, name, type)		                \
@@ -61,8 +63,9 @@
 #ifdef POSITION
 #define ALLOC1_INTERFACE( name, direction, localisation, str, it1)	\
-  Interface_fifo * interface [it1];					\
+  const uint32_t iterator_1 = it1;					\
+  Interface_fifo * interface [iterator_1];				\
   {									\
     std::string      separator="_";					\
-    for (uint32_t i=0; i<it1; i++)					\
+    for (uint32_t i=0; i<iterator_1; i++)				\
       {									\
 	interface [i] = _interfaces->set_interface( name+separator+toString(i), direction, localisation, str); \
@@ -71,8 +74,9 @@
 #else
 #define ALLOC1_INTERFACE( name, direction, localisation, str, it1)	\
-  Interface_fifo * interface [it1];					\
+  const uint32_t iterator_1 = it1;					\
+  Interface_fifo * interface [iterator_1];				\
   {									\
     std::string      separator="_";					\
-    for (uint32_t i=0; i<it1; i++)					\
+    for (uint32_t i=0; i<iterator_1; i++)				\
       {									\
 	interface [i] = _interfaces->set_interface( name+separator+toString(i)); \
@@ -82,69 +86,71 @@
 
 
-#define ALLOC1_VALACK_IN( sig, name, type, it1)				\
+#define ALLOC1_VALACK_IN( sig, name, type)				\
   {									\
-    sig = new SC_IN (Tcontrol_t) * [it1];				\
-    for (uint32_t i=0; i<it1; i++)					\
+    sig = new SC_IN (Tcontrol_t) * [iterator_1];			\
+    for (uint32_t i=0; i<iterator_1; i++)				\
       {									\
 	sig [i] = interface[i]->set_signal_valack_in (name, type);	\
       }									\
   }
-#define ALLOC1_VALACK_OUT(sig, name, type, it1)				\
+#define ALLOC1_VALACK_OUT(sig, name, type)				\
   {									\
-    sig = new SC_OUT(Tcontrol_t) * [it1];				\
-    for (uint32_t i=0; i<it1; i++)					\
+    sig = new SC_OUT(Tcontrol_t) * [iterator_1];			\
+    for (uint32_t i=0; i<iterator_1; i++)				\
       {									\
 	sig [i] = interface[i]->set_signal_valack_out(name, type);	\
       }									\
   }
-#define ALLOC1_VAL_IN(    sig, it1)					\
+#define ALLOC1_VAL_IN(    sig)						\
   {									\
-    sig = new SC_IN (Tcontrol_t) * [it1];				\
-    for (uint32_t i=0; i<it1; i++)					\
+    sig = new SC_IN (Tcontrol_t) * [iterator_1];			\
+    for (uint32_t i=0; i<iterator_1; i++)				\
       {									\
 	sig [i] = interface[i]->set_signal_valack_in (VAL);		\
       }									\
   }
-#define ALLOC1_VAL_OUT(   sig, it1)					\
+#define ALLOC1_VAL_OUT(   sig)						\
   {									\
-    sig = new SC_OUT(Tcontrol_t) * [it1];				\
-    for (uint32_t i=0; i<it1; i++)					\
+    sig = new SC_OUT(Tcontrol_t) * [iterator_1];			\
+    for (uint32_t i=0; i<iterator_1; i++)				\
       {									\
 	sig [i] = interface[i]->set_signal_valack_out(VAL);		\
       }									\
   }
-#define ALLOC1_ACK_IN(    sig, it1)					\
+#define ALLOC1_ACK_IN(    sig)						\
   {									\
-    sig = new SC_IN (Tcontrol_t) * [it1];				\
-    for (uint32_t i=0; i<it1; i++)					\
+    sig = new SC_IN (Tcontrol_t) * [iterator_1];			\
+    for (uint32_t i=0; i<iterator_1; i++)				\
       {									\
 	sig [i] = interface[i]->set_signal_valack_in (ACK);		\
       }									\
   }
-#define ALLOC1_ACK_OUT(   sig, it1)					\
+#define ALLOC1_ACK_OUT(   sig)						\
   {									\
-    sig = new SC_OUT(Tcontrol_t) * [it1];				\
-    for (uint32_t i=0; i<it1; i++)					\
+    sig = new SC_OUT(Tcontrol_t) * [iterator_1];			\
+    for (uint32_t i=0; i<iterator_1; i++)				\
       {									\
 	sig [i] = interface[i]->set_signal_valack_out(ACK);		\
       }									\
   }
-#define ALLOC1_SIGNAL_IN( sig, name, type, size, it1)			\
-  {									\
-    sig = new SC_IN (type) * [it1];					\
-    for (uint32_t i=0; i<it1; i++)					\
-      {									\
-	sig [i] = interface[i]->set_signal_in <type> (name, size);	\
-      }									\
-  }
+#define ALLOC1_SIGNAL_IN( sig, name, type, size)			\
+  if (size > 0)								\
+    {									\
+      sig = new SC_IN (type) * [iterator_1];				\
+      for (uint32_t i=0; i<iterator_1; i++)				\
+	{								\
+	  sig [i] = interface[i]->set_signal_in <type> (name, size);	\
+	}								\
+    }
 
-#define ALLOC1_SIGNAL_OUT(sig, name, type, size, it1)			\
-  {									\
-    sig = new SC_OUT(type) * [it1];					\
-    for (uint32_t i=0; i<it1; i++)					\
-      {									\
-	sig [i] = interface[i]->set_signal_out<type> (name, size);	\
-      }									\
-  }
+#define ALLOC1_SIGNAL_OUT(sig, name, type, size)			\
+  if (size > 0)								\
+    {									\
+      sig = new SC_OUT(type) * [iterator_1];				\
+      for (uint32_t i=0; i<iterator_1; i++)				\
+	{								\
+	  sig [i] = interface[i]->set_signal_out<type> (name, size);	\
+	}								\
+    }
 
 #define ALLOC1_SC_SIGNAL( sig, name, type, it1)				\
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Constants.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Constants.h	(revision 75)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Constants.h	(revision 76)
@@ -6,10 +6,16 @@
 
   //=========================================================[ Type ]=====
-#  define TYPE_ALU                                 0x0        // 000000 - unit multiple
-#  define TYPE_BRANCH                              0x1        // 000001 - unit multiple, to a special routing
-#  define TYPE_MEMORY                              0x2        // 000010 - unit uniq
-#  define TYPE_MAC                                 0x4        // 000100 - unit uniq
-#  define TYPE_TIMER                               0x8        // 001000 - unit uniq
-#  define TYPE_CUSTOM                              0x10       // 010000 - unit uniq
+#  define TYPE_ALU                                 0x0        // 00000 - unit multiple
+#  define TYPE_SHIFT                               0x1        // 00000 - unit multiple
+#  define TYPE_MOVE                                0x2        // 00000 - unit multiple
+#  define TYPE_TEST                                0x3        // 00000 - unit multiple
+#  define TYPE_MUL_DIV                             0x4        // 00000 - unit multiple, type optionnal
+#  define TYPE_EXTEND                              0x5        // 00000 - unit multiple, type optionnal
+#  define TYPE_FIND                                0x6        // 00000 - unit multiple, type optionnal
+#  define TYPE_SPECIAL                             0x7        // 00000 - unit uniq
+#  define TYPE_CUSTOM                              0x8        // 00000 - unit uniq
+#  define TYPE_BRANCH                              0x9        // 00000 - unit multiple, to a special routing
+#  define TYPE_MEMORY                              0xa        // 00000 - unit uniq
+#  define MAX_TYPE                                 0x10       // 00000 - unit uniq
 
   //====================================================[ Operation ]=====
@@ -116,42 +122,50 @@
 
   //---------------------------------------------[ Functionnal Unit ]-----
-#  define OPERATION_ALU_L_ADD                      0x0        // 000_0000 l.add   , l.addi
-#  define OPERATION_ALU_L_ADDC                     0x1        // 000_0000 l.addc  , l.addic
-#  define OPERATION_ALU_L_SUB                      0x2        // 000_0000 l.sub
-#  define OPERATION_ALU_L_MUL                      0x3        // 000_0000 l.mul   , l.muli
-#  define OPERATION_ALU_L_MULU                     0x4        // 000_0000 l.mulu
-#  define OPERATION_ALU_L_DIV                      0x5        // 000_0000 l.div
-#  define OPERATION_ALU_L_DIVU                     0x6        // 000_0000 l.divu
-#  define OPERATION_ALU_L_AND                      0x7        // 000_0000 l.and   , l.andi
-#  define OPERATION_ALU_L_OR                       0x8        // 000_0000 l.or    , l.ori
-#  define OPERATION_ALU_L_XOR                      0x9        // 000_0000 l.xor   , l.xori
-#  define OPERATION_ALU_L_TEST_F                   0xa        // 000_0000 l.bf
-#  define OPERATION_ALU_L_TEST_NF                  0xb        // 000_0000 l.bnf
-#  define OPERATION_ALU_L_JALR                     0xc        // 000_0000 l.jal   , l.jalr , l.jr
-#  define OPERATION_ALU_L_SLL                      0xd        // 000_0000 l.sll   , l.slli
-#  define OPERATION_ALU_L_SRA                      0xe        // 000_0000 l.sra   , l.srai
-#  define OPERATION_ALU_L_SRL                      0xf        // 000_0000 l.srl   , l.srli
-#  define OPERATION_ALU_L_ROR                      0x10       // 000_0000 l.ror   , l.rori
-#  define OPERATION_ALU_L_MOVHI                    0x11       // 000_0000 l.movhi
-#  define OPERATION_ALU_L_EXTEND_S                 0x12       // 000_0000 l.extbs , l.exths, l.extws
-#  define OPERATION_ALU_L_EXTEND_Z                 0x13       // 000_0000 l.extbz , l.exthz, l.extwz
-#  define OPERATION_ALU_L_CMOV                     0x14       // 000_0000 l.cmov
-#  define OPERATION_ALU_L_FF1                      0x15       // 000_0000 l.ff1
-#  define OPERATION_ALU_L_FL1                      0x16       // 000_0000 l.fl1
-#  define OPERATION_ALU_L_MFSPR                    0x17       // 000_0000 l.mfspr
-#  define OPERATION_ALU_L_MTSPR                    0x18       // 000_0000 l.mtspr
-#  define OPERATION_ALU_L_SFGES                    0x19       // 000_0000 l.sfges , l.sfges
-#  define OPERATION_ALU_L_SFGEU                    0x1a       // 000_0000 l.sfgeu , l.sfgeu
-#  define OPERATION_ALU_L_SFGTS                    0x1b       // 000_0000 L.sfgts , l.sfgts
-#  define OPERATION_ALU_L_SFGTU                    0x1c       // 000_0000 l.sfgtu , l.sfgtu
-#  define OPERATION_ALU_L_SFLES                    0x1d       // 000_0000 l.sfles , l.sfles
-#  define OPERATION_ALU_L_SFLEU                    0x1e       // 000_0000 l.sfleu , l.sfleu
-#  define OPERATION_ALU_L_SFLTS                    0x1f       // 000_0000 l.sflts , l.sflts
-#  define OPERATION_ALU_L_SFLTU                    0x20       // 000_0000 l.sfltu , l.sfltu
-#  define OPERATION_ALU_L_SFEQ                     0x21       // 000_0000 l.sfeq  , l.sfeqi
-#  define OPERATION_ALU_L_SFNE                     0x22       // 000_0000 l.sfne  , l.sfnei
-#  define OPERATION_ALU_L_MAC                      0x23       // 000_0000 l.mac   , l.maci
-#  define OPERATION_ALU_L_MACRC                    0x24       // 000_0000 l.macrc
-#  define OPERATION_ALU_L_MSB                      0x25       // 000_0000 l.msb
+#  define OPERATION_ALU_L_ADD                      0x1        // 000_0000 l.add   , l.addi
+#  define OPERATION_ALU_L_ADDC                     0x2        // 000_0000 l.addc  , l.addic
+#  define OPERATION_ALU_L_SUB                      0x4        // 000_0000 l.sub
+#  define OPERATION_ALU_L_AND                      0x8        // 000_0000 l.and   , l.andi
+#  define OPERATION_ALU_L_OR                       0x10       // 000_0000 l.or    , l.ori
+#  define OPERATION_ALU_L_XOR                      0x20       // 000_0000 l.xor   , l.xori
+
+#  define OPERATION_SHIFT_L_SLL                    0x1        // 000_0000 l.sll   , l.slli
+#  define OPERATION_SHIFT_L_SRA                    0x2        // 000_0000 l.sra   , l.srai
+#  define OPERATION_SHIFT_L_SRL                    0x4        // 000_0000 l.srl   , l.srli
+#  define OPERATION_SHIFT_L_ROR                    0x8        // 000_0000 l.ror   , l.rori
+
+#  define OPERATION_MOVE_L_MOVHI                   0x1        // 000_0000 l.movhi
+#  define OPERATION_MOVE_L_CMOV                    0x2        // 000_0000 l.cmov
+
+#  define OPERATION_TEST_L_SFGES                   0x41       // 000_0000 l.sfges , l.sfges
+#  define OPERATION_TEST_L_SFGEU                   0x1        // 000_0000 l.sfgeu , l.sfgeu
+#  define OPERATION_TEST_L_SFGTS                   0x42       // 000_0000 L.sfgts , l.sfgts
+#  define OPERATION_TEST_L_SFGTU                   0x2        // 000_0000 l.sfgtu , l.sfgtu
+#  define OPERATION_TEST_L_SFLES                   0x44       // 000_0000 l.sfles , l.sfles
+#  define OPERATION_TEST_L_SFLEU                   0x4        // 000_0000 l.sfleu , l.sfleu
+#  define OPERATION_TEST_L_SFLTS                   0x48       // 000_0000 l.sflts , l.sflts
+#  define OPERATION_TEST_L_SFLTU                   0x8        // 000_0000 l.sfltu , l.sfltu
+#  define OPERATION_TEST_L_SFEQ                    0x10       // 000_0000 l.sfeq  , l.sfeqi
+#  define OPERATION_TEST_L_SFNE                    0x20       // 000_0000 l.sfne  , l.sfnei
+
+#  define OPERATION_MUL_DIV_L_MUL                  0x1        // 000_0000 l.mul   , l.muli
+#  define OPERATION_MUL_DIV_L_MULU                 0x2        // 000_0000 l.mulu
+#  define OPERATION_MUL_DIV_L_DIV                  0x4        // 000_0000 l.div
+#  define OPERATION_MUL_DIV_L_DIVU                 0x8        // 000_0000 l.divu
+
+#  define OPERATION_EXTEND_L_EXTEND_Z              0x1        // 000_0000 l.extbz , l.exthz, l.extwz
+#  define OPERATION_EXTEND_L_EXTEND_S              0x2        // 000_0000 l.extbs , l.exths, l.extws
+
+#  define OPERATION_FIND_L_FF1                     0x1        // 000_0000 l.ff1
+#  define OPERATION_FIND_L_FL1                     0x2        // 000_0000 l.fl1
+
+#  define OPERATION_SPECIAL_L_MFSPR                0x1        // 000_0000 l.mfspr
+#  define OPERATION_SPECIAL_L_MTSPR                0x2        // 000_0000 l.mtspr
+#  define OPERATION_SPECIAL_L_MAC                  0x4        // 000_0000 l.mac   , l.maci
+#  define OPERATION_SPECIAL_L_MACRC                0x8        // 000_0000 l.macrc
+#  define OPERATION_SPECIAL_L_MSB                  0x10       // 000_0000 l.msb
+
+#  define OPERATION_BRANCH_L_TEST_NF               0x1        // 000_0000 l.bnf
+#  define OPERATION_BRANCH_L_TEST_F                0x2        // 000_0000 l.bf
+#  define OPERATION_BRANCH_L_JALR                  0x4        // 000_0000 l.jal   , l.jalr , l.jr
 
   //-------------------------------------------------------[ Custom ]-----
