Wie kann ich auf eine Veranstaltung aus einer Liste von Ereignissen im Specman warten?

StackOverflow https://stackoverflow.com/questions/1530228

  •  20-09-2019
  •  | 
  •  

Frage

Ich habe eine Struktur in Specman:

struct foo_s {
    event foo_ev;

    // some code that will emit foo_ev sometimes
};

Und eine Liste:

var foo_l: list of foo_s;  // later code will manage the list

Und jetzt möchte ich auf einem der synchronisieren foo_ev Ereignisse in der Liste:

first of {
    sync @foo_l[0].foo_ev;
    sync @foo_l[1].foo_ev;
    sync @foo_l[2].foo_ev;
    //etc
};

Das Problem ist, dass ich zu der Zeit, als dieser Snippet läuft foo_l. Gibt es eine Möglichkeit für mich, darauf zu warten irgendein des foo_ev Ereignisse ausstrahlen?

War es hilfreich?

Lösung

Sie könnten die Veranstaltung manuell kaskade:

unit bar_u {
    foo_l: list of foo_s;  
    event any_foo_toggled_e;
}

struct foo_s {
    event foo_e;
    on foo_e {
        emit get_enclosing_unit(bar_u).any_foo_toggled_e;
    };

    // some code that will emit foo_ev sometimes
};

Andere Tipps

Eine andere Lösung wäre die Verwendung eines berechneten Makros. Das Konzept der berechneten Makros besteht darin, Code zu schreiben, um E-Code zu generieren. Mit diesem Ansatz könnten Sie die Länge von betrachten foo_l und erzeugen die first of { sync ... Liste als Austausch des Makros.

Entschuldigung, ich habe derzeit keine Zeit, ein Beispiel zu kochen, aber die Specman -Dokumentation sollte Ihr Freund sein, wenn Sie interessiert sind. Wenn Sie noch nichts von Computer Makros gehört haben, ist es definitiv einen Blick wert.

AKTUALISIEREN]: Im Team Specman haben sie gerade eine veröffentlicht Beispiel eines berechneten Makros. Sie haben auch einige ältere Beiträge Zu diesem Thema.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top