Wie kann ich auf eine Veranstaltung aus einer Liste von Ereignissen im Specman warten?
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?
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.