SystemC-sc_event
sc_event可以用来定义一个事件,SC_THREAD进程可以采用wait( const sc_event&)、wait( sc_event_or_list&)、wait( sc_event_and_list&)来将进程挂起等待事件发生后将进程重新激活。
sc_event的定义如下:
- class sc_event
- {
- publ:
- sc_event();
- ~sc_event();
- void notify();
- void notify( const sc_time& );
- void notify( double , sc_time_unit );
- void cel();
- sc_event_or_list†& operator| ( const sc_event& ) const;
- sc_event_and_list†& operator& ( const sc_event& ) const;
- private:
- // Db
- sc_event( const sc_event& );
- sc_event& operator= ( const sc_event& );
- };
当一个事件发生,它总是通过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); //一个△时间后发送事件通知,取消所有前面的事件通知。