2011-02-15 54 views
3

在SystemC中,使用事件作为模块输入/输出的语法是什么。SystemC:在模块之间传递事件

我有一个工作模块,我想发送一个事件来抢占当前正在从调度程序模块执行的操作。

sc_port<preempt_event_if> preempt_event; 

我在上面显示的工作模块中声明了一个接口。

的接口被定义为以下:

class preempt_event_if : virtual public sc_interface 
{ 
    public: 
     virtual const sc_event& preempt_event() const = 0; 
}; 

它使用事件将其定义为信道如下:

const sc_event& preempt_event() const { return preempt_interrupt; } 

哪个其中preempt_interrupt是获取从内通知的SystemC的事件频道的功能。

回答

0

你做得对,我只是使用void preempt()它调用通知,而不是通过接口返回事件。

0

在woker模块,你可以使用静态灵敏度列表中重写end_of_elaboration()内核的回调函数创建一个动态的过程:

SC_METHOD(do_something); 
sensitive << preempt_event->preempt_event(); 

因为只有在细化阶段结束时,你肯定该端口已经绑定到现有的preempt_event通道。 在woker模块中对事件做出反应的另一种方法是,您可以在正常SC_METHOD中的普通SC_THREAD或next_trigger(preempt_event-> preempt_event())中使用wait(preempt_event-> preempt_event())。这两种方式都允许您的流程动态地对事件敏感。然后在您的调度程序模块中,可以再次创建一个sc_port并访问preempt_event()。notify()以将事件发送到工作模块。