ne specman ont des variables statiques?
Question
Je le code suivant dans specman que je hérité:
some_method() is {
var a: bool;
if (!a) {
a = some_other_method();
};
};
Ma compréhension est que chaque some_method()
de temps est appelé, a
est généré à nouveau, et il n'y a aucun sens à vérifier la valeur de a
avant qu'il ne soit affecté. Cependant, il se peut que je manque quelque chose ici. Par exemple, si a
est statique alors ce code est logique, ce qui me amène à ma question:
Est-il possible pour une variable à statique specman?
La solution
il n'y a pas de variables statiques comme dans C. Une variable dans une méthode a sa valeur par défaut (False
dans ce cas) sinon initialisé, vous devriez donc avoir raison if (!a)
doit toujours être True
.
Les choses seraient différentes si a
était membre struct, alors comme dans d'autres langues OO il y conserver la valeur sur plusieurs appels de méthode et le contrôle serait plus logique:
struct some_struct_s {
a : bool;
some_method() is {
if (!a) {
a = some_other_method();
};
};
};
Vous pouvez vérifier des choses comme cela aussi l'invite interactive:
Specman> var a : bool;
Specman> print a
a = FALSE
l'aide interactive est aussi agréable, par exemple essayer:
Specman> help variable
et sélectionner l'entrée (en nombre) sn_eref: variables : declaring
. Vous y trouverez toutes les informations pertinentes pour votre question.
Cordialement, Daniel
Autres conseils
membres struct statiques (événements, champs, méthodes) ont été ajoutés à la langue dans Specman v15.2. Un champ statique ne peut pas être générée, physique (%) ou utilisé lorsque les sous-types.
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; };
Voici quelques commentaires du blog de teamspecman: membres statiques dans e