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 145)
+++ trunk/modules/vci_synthetic_initator/caba/sources/include/vci_synthetic_initiator.h	(revision 146)
@@ -152,5 +152,6 @@
 
       // Broadcast FSM
-      sc_signal<uint32_t>	r_bc_nrsp;	// Expected number of responses for a broadcast command
+      sc_signal<uint32_t>	r_bc_nrsp;	   // Expected number of responses for a broadcast command
+      sc_signal<uint32_t>       r_time_to_next_bc; // Time to wait between 2 BC
 	
       // Pending transaction FSMs
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 145)
+++ trunk/modules/vci_synthetic_initator/caba/sources/src/vci_synthetic_initiator.cpp	(revision 146)
@@ -94,5 +94,6 @@
     r_latency_single("r_latency_single"),	
     r_nb_bc("r_nb_bc"),	
-    r_latency_bc("r_latency_bc")		
+    r_latency_bc("r_latency_bc"),
+    r_time_to_next_bc("r_time_to_next_bc")
 {
 
@@ -172,7 +173,8 @@
 		  << " : state_rsp_fsm = " << state_bc_rsp_str[r_pending_fsm[0].read()] 
 		  << " Adresse to send : " << std::hex << r_cmd_address.read()
-		  << " Number of broadcast to receive : " << std::dec << r_bc_nrsp.read() 
+		  << " Number of BC_RSP to receive : " << std::dec << r_bc_nrsp.read() 
 		  << " Number of packets sent : " << std::dec << r_nb_single.read() << " " << r_cmd_trdid.read() 
-		  << " Cycles to the next BC : " << r_cpt_period.read() << std::endl;
+		  << " Number of BC sent : " << r_nb_bc.read()
+		  << " Cycles to the next BC : " << r_time_to_next_bc.read() << std::endl;
 	for(int i = 0; i < (1<<vci_param::T) ; i++){
 	  std::cout << "ID : " << i << " " << (uint64_t)(r_pending_date[i].read()) << std::endl;
@@ -226,4 +228,8 @@
       
       r_cmd_seed       		= (uint32_t)m_srcid;
+
+#ifndef RANDOM_PERIOD
+      r_time_to_next_bc		= m_bc_period;
+#endif
 
       return;
@@ -345,9 +351,5 @@
     //  traffic regulator
     ////////////////////////
-#ifdef RANDOM_PERIOD
-    if ( m_bc_period && (r_cpt_period.read() == 0) )
-#else
-    if ( m_bc_period && (r_cpt_period.read() > m_bc_period) )
-#endif
+    if ( m_bc_period && (r_cpt_period.read() > r_time_to_next_bc.read()) )
     { 
       fifo_put = true ;
@@ -356,9 +358,5 @@
       {
         r_nb_bc = r_nb_bc.read() + 1;
-#ifdef RANDOM_PERIOD
-	r_cpt_period = (uint64_t) (rand()%(2*m_bc_period));
-#else
         r_cpt_period = 0;
-#endif
       }
     }
@@ -370,15 +368,13 @@
     }
 
+    if ( m_bc_period && (r_cpt_period.read() > r_time_to_next_bc.read()) && r_date_fifo.wok() ) 
+    {
 #ifdef RANDOM_PERIOD
-    if ( m_bc_period && (r_cpt_period.read() == 0) && r_date_fifo.wok() ) 
-	r_cpt_period = (uint64_t) (rand()%(2*m_bc_period));
-    else
-      r_cpt_period = r_cpt_period.read() - 1;
-#else
-    if ( m_bc_period && (r_cpt_period.read() > m_bc_period) && r_date_fifo.wok() ) 
+      r_time_to_next_bc = (uint32_t)(rand()%(2*m_bc_period));
+#endif
       r_cpt_period = 0;
+    }
     else
       r_cpt_period = r_cpt_period.read() + 1;
-#endif
 
     ////////////////////////
