Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Parameters.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Parameters.cpp	(revision 101)
@@ -7,5 +7,5 @@
 
 #include "Behavioural/Generic/Queue/include/Parameters.h"
-
+#include "Common/include/Log2.h"
 namespace morpheo {
 namespace behavioural {
@@ -16,10 +16,16 @@
 #undef  FUNCTION
 #define FUNCTION "Queue::Parameters"
-  Parameters::Parameters (uint32_t size_queue,
-			  uint32_t size_data ,
-                          uint32_t nb_port_slot):
-    _size_queue   (size_queue),
-    _size_data    (size_data ),
-    _nb_port_slot (nb_port_slot)
+  Parameters::Parameters (uint32_t size_queue         ,
+                          uint32_t size_data          ,
+                          uint32_t nb_port_slot       ,
+                          bool     have_port_ptr_write,
+                          bool     have_port_ptr_read ):
+    _size_queue          (size_queue),
+    _size_data           (size_data ),
+    _nb_port_slot        (nb_port_slot),
+    _have_port_ptr_write (have_port_ptr_write and (log2(size_queue)>0)),
+    _have_port_ptr_read  (have_port_ptr_read  and (log2(size_queue)>0)),
+    _size_ptr            (log2(size_queue)),
+    _have_port_ptr       (have_port_ptr_write or have_port_ptr_read)
   {
     log_printf(FUNC,Queue,FUNCTION,"Begin");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_allocation.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_allocation.cpp	(revision 101)
@@ -72,4 +72,15 @@
       ALLOC1_SIGNAL_OUT(out_SLOT_DATA ,"data",Tdata_t,_param->_size_data);
     }
+
+    // ~~~~~[ Interface "ptr" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    if (_param->_have_port_ptr)
+    {
+      ALLOC0_INTERFACE("ptr", OUT, EAST, _("Internal pointer."));
+      
+      if (_param->_have_port_ptr_write)
+      ALLOC0_SIGNAL_OUT(out_PTR_WRITE ,"write",Tptr_t,_param->_size_ptr);
+      if (_param->_have_port_ptr_read )
+      ALLOC0_SIGNAL_OUT(out_PTR_READ  ,"read" ,Tptr_t,_param->_size_ptr);
+    }
      
     if (usage_is_set(_usage,USE_SYSTEMC))
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_deallocation.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_deallocation.cpp	(revision 101)
@@ -36,4 +36,9 @@
         DELETE1_SIGNAL(out_SLOT_VAL    ,_param->_nb_port_slot,1);
         DELETE1_SIGNAL(out_SLOT_DATA   ,_param->_nb_port_slot,_param->_size_data);
+
+        if (_param->_have_port_ptr_write)
+        DELETE0_SIGNAL(out_PTR_WRITE   ,_param->_size_ptr);
+        if (_param->_have_port_ptr_read )
+        DELETE0_SIGNAL(out_PTR_READ    ,_param->_size_ptr);
 	
         // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_genMoore.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_genMoore.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_genMoore.cpp	(revision 101)
@@ -20,5 +20,7 @@
     log_printf(FUNC,Queue,FUNCTION,"Begin");
 
+    //---------------------------------------------
     // Output
+    //---------------------------------------------
     internal_INSERT_ACK = not _queue_control->full();
     internal_RETIRE_VAL = not _queue_control->empty();
@@ -28,5 +30,7 @@
     PORT_WRITE(out_RETIRE_DATA,_queue_data[(*_queue_control)[0]]);
 
+    //---------------------------------------------
     // Slot
+    //---------------------------------------------
     // Note : Slot 0 is the same slot as retire interface.
     uint32_t nb_elt = _queue_control->nb_elt();
@@ -37,4 +41,12 @@
         PORT_WRITE(out_SLOT_DATA [i],_queue_data[(*_queue_control)[i]]);
       }
+
+    //---------------------------------------------
+    // Pointer
+    //---------------------------------------------
+    if (_param->_have_port_ptr_write)
+    PORT_WRITE(out_PTR_WRITE, _queue_control->ptr_push());
+    if (_param->_have_port_ptr_read )
+    PORT_WRITE(out_PTR_READ , _queue_control->ptr_pop ());
 
     log_printf(FUNC,Queue,FUNCTION,"End");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_vhdl_body.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_vhdl_body.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_vhdl_body.cpp	(revision 101)
@@ -62,4 +62,17 @@
           else
             vhdl->set_body   (0,"out_SLOT_"+toString(i)+"_DATA       <= reg_DATA(conv_integer(0));");
+      }
+
+    if (_param->_have_port_ptr)
+      {
+    vhdl->set_body   (0,"");
+    vhdl->set_comment(0,"---------------------------------------------------------------------------");
+    vhdl->set_comment(0," Slot");
+    vhdl->set_comment(0,"---------------------------------------------------------------------------");
+    vhdl->set_body   (0,"");
+    if (_param->_have_port_ptr_write)
+    vhdl->set_body   (0,"out_PTR_WRITE         <= signal_PTR_WRITE;");
+    if (_param->_have_port_ptr_read)
+    vhdl->set_body   (0,"out_PTR_READ          <= signal_PTR_READ;");
       }
 
