hat Specman statische Variablen?
Frage
Ich habe den folgenden Code in Specman, die ich geerbt:
some_method() is {
var a: bool;
if (!a) {
a = some_other_method();
};
};
Mein Verständnis ist, dass jedes Mal, some_method()
genannt wird, a
wird neu generiert, und es hat keinen Sinn a
Wert bei der Prüfung, bevor sie zugewiesen ist. Es kann jedoch sein, dass ich hier etwas fehlt bin. wenn a
statisch ist zum Beispiel dann macht dieser Code Sinn, der mich auf meine Frage bringt:
Gibt es eine Möglichkeit für eine Variable in Specman statisch zu sein?
Lösung
gibt es keine statischen Variablen wie in C. Eine Variable in einem Verfahren den Standardwert hat (False
in diesem Fall), wenn nicht initialisiert, so dass Sie sich if (!a)
sein sollte, sollte immer True
werden.
Dinge wären anders, wenn a
ein struct Mitglied ist, dann wie in anderen OO-Sprachen wäre es dort Wert über mehrere Methodenaufrufe beibehalten und die Prüfung würde mehr Sinn machen:
struct some_struct_s {
a : bool;
some_method() is {
if (!a) {
a = some_other_method();
};
};
};
Sie können Sachen wie diese überprüfen auch auf der interaktiven Eingabeaufforderung:
Specman> var a : bool;
Specman> print a
a = FALSE
Dort wird die interaktive Hilfe ist auch schön, zum Beispiel versuchen:
Specman> help variable
und wählen Sie den Eintrag (nach Anzahl) sn_eref: variables : declaring
. Dort finden Sie alle relevanten Informationen für Ihre Frage.
Cheers, Daniel
Andere Tipps
Statische Strukturkomponenten (Veranstaltungen, Felder, Methoden) wurden in der Sprache, in Specman v15.2 hinzugefügt. Ein statisches Feld kann nicht erzeugt werden, physikalisches (%) oder wenn verwendet in Subtypen.
struct some_struct_s {
a : bool;
some_method() is {
if (!a) {
a = some_other_method();
};
};
};
-- Change field 'a' for all instances
on xxx { some_struct_s::a = TRUE; };
Hier einige Kommentare aus dem teamspecman Blog: Statische Mitglieder in e