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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top