2011-02-15 113 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()以將事件發送到工作模塊。