/** * Construct a barrier for `count` fibers and a completion function `completion`. */ barrier(unsigned int count, unsigned int (*completion)()) : m_count(check_counter(count)) , m_generation(0) , fct_(completion ? detail::size_completion_function(completion) : detail::size_completion_function(detail::default_barrier_reseter(count))) { }
barrier( unsigned int count, F&& completion, typename std::enable_if<std::is_same<typename std::result_of<F>::type, unsigned int>::value, dummy*>::type = 0) : m_count(check_counter(count)), m_generation(0), fct_(std::move(completion)) { }
barrier( unsigned int count, F&& completion, typename std::enable_if<std::is_void<typename std::result_of<F>::type>::value, dummy*>::type = 0) : m_count(check_counter(count)) , m_generation(0) , fct_(detail::void_functor_barrier_reseter(count, std::move(completion))) { }
void top::thread_process() { cout<<"[SC "<<sc_time_stamp()<<"] staring SC thread process."<<endl; int l_counter_named_pool = 0; int l_counter_global_pool = 0; // #0 // wait event from named pool of sv with data named_pool_auto_inc = 3; for(int i=0; i < 10; i++) { expected ++; wait(sc_time(10, SC_PS)); } named_pool_auto_inc = 0; wait(sc_time(2, SC_PS)); // #102 // trigger event from named pool with data for(int i=0; i < 10; i++) { expected ++; event_named_pool_d_trigger(); wait(sc_time(10, SC_PS)); } // #202 // wait event from global pool of sv with data global_pool_auto_inc = 3; for(int i=0; i < 10; i++) { expected ++; wait(sc_time(10, SC_PS)); } global_pool_auto_inc = 0; wait(sc_time(2, SC_PS)); // #304 // trigger event from global pool with data for(int i=0; i < 10; i++) { expected ++; event_global_pool_d_trigger(); wait(sc_time(10, SC_PS)); } // #404 // wait event from named pool of sv for(int i=0; i < 10; i++) { expected ++; l_counter_named_pool ++; wait(sc_time(10, SC_PS)); } // trigger event from named pool for(int i=0; i < 10; i++) { expected ++; l_counter_named_pool ++; event_named_pool_trigger(); wait(sc_time(10, SC_PS)); } // wait event from global pool of sv for(int i=0; i < 10; i++) { expected ++; l_counter_global_pool ++; wait(sc_time(10, SC_PS)); } // trigger event from global pool for(int i=0; i < 10; i++) { expected ++; l_counter_global_pool ++; event_global_pool_trigger(); wait(sc_time(10, SC_PS)); } wait(sc_time(1, SC_PS)); // check triggerd counters; expected ++; check_counter(counter_named_pool, l_counter_named_pool); expected ++; check_counter(counter_global_pool, l_counter_global_pool); // check reset e_global_pool assert(e_global_pool->is_on()); wait(sc_time(2, SC_PS)); expected ++; if (!e_global_pool->is_off()) { std::cout << "[SC " << sc_time_stamp() << "] ERROR - event " << e_global_pool->get_name() << " is not reset" << std::endl; pass_event &= false; } // reset e_global_pool_d expected ++; e_global_pool_d->reset(); wait(sc_time(2, SC_PS)); // check deleted e_global_pool; expected ++; if(uvm_event_pool::get_global_pool()->exists("event_from_global_pool")) { std::cout << "[SC " << sc_time_stamp() << "] ERROR - event " << e_global_pool->get_name() << " is not deleted" << std::endl; pass_event &= false; } // remove event_from_global_pool_d expected ++; uvm_event_pool::get_global_pool()->remove("event_from_global_pool_d"); wait(sc_time(10, SC_PS)); cout<<"[SC "<<sc_time_stamp()<<"] End of SC thread process"<<endl; }
/** * Construct a barrier for `count` fibers */ explicit barrier(unsigned int count) : m_count(check_counter(count)), m_generation(0), fct_(detail::default_barrier_reseter(count)) { }