示例#1
0
 /**
  * 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)))
 {
 }
示例#2
0
 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))
 {
 }
示例#3
0
 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)))
 {
 }
示例#4
0
文件: top.cpp 项目: funningboy/smtdv
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;
}
示例#5
0
 /**
  * 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))
 {
 }