学海荡舟手机网
导航

主页 > 电子设备技术 > 电器电路基础 > > 详细内容

SystemC-sc_event

  sc_event可以用来定义一个事件,SC_THREAD进程可以采用wait( const sc_event&)、wait( sc_event_or_list&)、wait( sc_event_and_list&)来将进程挂起等待事件发生后将进程重新激活。

  sc_event的定义如下:  

  1. class sc_event  
  2. {  
  3. publ:  
  4. sc_event();  
  5. ~sc_event();  
  6. void notify();  
  7. void notify( const sc_time& );  
  8. void notify( double , sc_time_unit );  
  9. void cel();  
  10. sc_event_or_list†& operator| ( const sc_event& ) const;  
  11. sc_event_and_list†& operator& ( const sc_event& ) const;  
  12. private:  
  13. // Db  
  14. sc_event( const sc_event& );  
  15. sc_event& operator= ( const sc_event& );  
  16. }; 

  当一个事件发生,它总是通过notify(…)函数通知所有等待该事件的进程。notify()表示事件立即发生即立刻发送事件通知,而notify( const sc_time& )和notify( double , sc_time_unit )则表示在所给定的时间后发送事件通知。如果时间为0,则时间将在一个△时间后发送事件通知,cancel()则取消前面所有因notify(…)调用而等待发送的通知。

      实际上,一个事件只能有一个等待发送的通知。更晚发生的通知总是被更近发生的通知所取代。比如,我们顺序执行以下代码:

      sc_event e;
      e.notify(SC_ZERO_TIME); // 一个△时间后发送事件通知
      e.notify(1, SC_NS); // 因为前一个通知更早,因此这个通知不起作用。
      e.notify(); // 立即通知,该通知使得e.notify(SC_ZERO_TIME)不再起作用

      又比如下面的代码:

      e.notify(2, SC_NS); //2ns后发送事件通知
      e.notify(3, SC_NS); //因为前一个通知更早,因此这个通知不起作用。
      e.notify(1, SC_NS); // 取消所有前面的e.notify(2, SC_NS)
      e.notify(SC_ZERO_TIME); //一个△时间后发送事件通知,取消所有前面的事件通知。


相关文章