2011-02-15 3 views
3

Dans SystemC, quelle est la syntaxe pour utiliser les événements en tant qu'entrées/sorties de module.SystemC: passage d'événements entre modules

J'ai un module de travail et je veux lui envoyer un événement pour préempter ce qu'il fait actuellement d'un module de planificateur.

sc_port<preempt_event_if> preempt_event; 

Je déclare une interface dans le module de travail illustré ci-dessus.

L'interface est définie comme suit:

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

Le canal qui utilise l'événement définit comme suit:

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

qui où preempt_interrupt est un événement SystemC qui obtient notifié à l'intérieur les fonctions de la chaîne.

Répondre

0

Vous le faites correctement, je voudrais simplement utiliser void preempt() qui appelle notifier, au lieu de retourner l'événement à travers l'interface.

0

Dans le module woker, vous pouvez utiliser la liste de sensibilité statique pour créer un processus dynamique dans la fonction de rappel du noyau end_of_elaboration surchargée():

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

Parce que dans la fin de la phase d'élaboration, vous êtes sûr que le port est déjà lié à un canal preempt_event existant. Une autre façon de réagir à l'événement dans le module woker est que vous pouvez simplement utiliser wait (preempt_event-> preempt_event()) dans votre SC_THREAD normal ou next_trigger (preempt_event-> preempt_event()) dans votre SC_METHOD normal. Les deux moyens permettent à votre processus d'être sensible à l'événement de manière dynamique. Ensuite, dans votre module de planificateur, vous pouvez à nouveau créer un port_sc et accéder à la fonction preempt_event(). Notify() pour envoyer un événement au module de travail.