Index: /trunk/modules/vci_synthetic_initator/caba/sources/include/vci_synthetic_initiator.h
===================================================================
--- /trunk/modules/vci_synthetic_initator/caba/sources/include/vci_synthetic_initiator.h	(revision 114)
+++ /trunk/modules/vci_synthetic_initator/caba/sources/include/vci_synthetic_initiator.h	(revision 115)
@@ -104,5 +104,7 @@
       void genMoore();
 
-      size_t destAdress();
+      uint32_t destAdress();
+
+      uint32_t destAdress(uint32_t *rand_seed);
 
       void printStats();
@@ -133,4 +135,5 @@
       size_t				  m_bc_nrsp;		    // Expected number of responses for a broadcast command
       addr_t				  m_address_to_send; 	    // Address to send the write command
+      uint32_t				  m_local_seed;
 
       // Fifo transmitting date to the VCI FSM
Index: /trunk/modules/vci_synthetic_initator/caba/sources/src/vci_synthetic_initiator.cpp
===================================================================
--- /trunk/modules/vci_synthetic_initator/caba/sources/src/vci_synthetic_initiator.cpp	(revision 114)
+++ /trunk/modules/vci_synthetic_initator/caba/sources/src/vci_synthetic_initiator.cpp	(revision 115)
@@ -32,4 +32,5 @@
 
 
+//#define DETERMINISM
 
 namespace soclib { namespace caba {
@@ -80,4 +81,5 @@
     m_ymax(ymax),
     m_date_fifo("m_date_fifo", depth),
+    m_local_seed(m_srcid),
     r_vci_fsm("r_vci_fsm")
     {
@@ -102,21 +104,17 @@
 
   ///////////////////////////////////
-  tmpl(size_t)::destAdress()
+  tmpl(uint32_t)::destAdress()
   ///////////////////////////////////
   {
-    return (size_t) (rand() % (m_xmesh * m_ymesh)) ;
+    return (uint32_t) (rand() % (m_xmesh * m_ymesh)) ;
   }
 
 
   ///////////////////////////////////
-//  tmpl(void)::destAdress(/*size_t X_local, size_t Y_local,*/ size_t &X_dest, size_t &Y_dest)
+  tmpl(uint32_t)::destAdress(uint32_t *rand_seed)
   ///////////////////////////////////
-//  {
-//    size_t x_dest_calc, y_dest_calc; 
-//    do{
-//      x_dest_calc = (rand()%m_xmesh);
-//      y_dest_calc = (rand()%m_ymesh);
-//    } while((x_dest_calc = m_x) && (y_dest_calc == m_y));
-//  }
+  {
+    return (uint32_t) (rand_r(rand_seed) % (m_xmesh * m_ymesh)) ;
+  }
 
   
@@ -132,8 +130,8 @@
 
 	std::cout << "Vci_Synthetic_Initiator " << name()
-		  << " : " << m_cpt_cycles << " cycles " 
+		  << " : " << std::dec << m_cpt_cycles << " cycles " 
 		  << " : state = " << state_str[r_vci_fsm] 
-		  << " Adresse to send : " << m_address_to_send 
-		  << " Number of broadcast to receive : " << m_bc_nrsp << std::endl;
+		  << " Adresse to send : " << std::hex << m_address_to_send 
+		  << " Number of broadcast to receive : " << std::dec << m_bc_nrsp << std::endl;
   }
 
@@ -152,5 +150,7 @@
     if ( ! p_resetn.read() ) {
       // Initializing seed for random numbers generation
+#ifndef DETERMINISM
       srand(time(NULL));
+#endif
 
       // Initializing FSMs
@@ -193,5 +193,9 @@
 	    } else {
 	      r_vci_fsm = VCI_SINGLE_SEND ;
+#ifdef DETERMINISM
+	      m_address_to_send = destAdress(&m_local_seed) << (vci_param::N)-(soclib::common::uint32_log2((uint32_t)m_xmesh)+soclib::common::uint32_log2((uint32_t)m_ymesh));
+#else
 	      m_address_to_send = destAdress() << (vci_param::N)-(soclib::common::uint32_log2((uint32_t)m_xmesh)+soclib::common::uint32_log2((uint32_t)m_ymesh));
+#endif
 	      m_count = 0;
 	    }
