puis-je définir les contraintes pour une variable une fois et générer quelques fois dans specman?

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

  •  19-08-2019
  •  | 
  •  

Question

J'ai une variable que je veux générer plusieurs fois dans la même fonction, chaque fois avec le même ensemble de contraintes. Puis-je définir les contraintes une fois et le gen juste plusieurs fois? C'est-à-dire, au lieu de ceci:

var a:uint;
gen a keeping {it in [100..120];};
// some code that uses a
.
.
.
gen a keeping {it in [100..120];};
// some code that uses a
.
.
.
gen a keeping {it in [100..120];};
// some code that uses a
// etc...

J'aimerais faire ceci:

var a:uint;
keep a in [100..120];
.
.
.
gen a;
// some code that uses a
.
.
.
gen a;
// some code that uses a
.
.
.
gen a;
// some code that uses a
// etc...

Ainsi, si je veux changer les contraintes de a , je ne dois le faire qu’une seule fois.

Était-ce utile?

La solution

Vous pouvez le faire en faisant de la variable un membre d'instance de l'objet englobant.

a : uint;
keep a in [100..120];
my_method()@qualified_clk_rise_e is {

    gen a;
    ...
    gen a;
    ...
    gen a; 
};

Cette implémentation n'est pas thread-safe si plusieurs my_method () s'exécutent simultanément sur le même objet. Vous pouvez le rendre [specman] thread-safe en affectant le 'a' généré à un 'my_a 'dans le cadre de la méthode:

var my_a : uint;
gen a;
my_a = a;

Ou vous pouvez simplement écrire une méthode pour générer 'a':

gen_a(): uint is {
    gen result keeping { it in [100..120] };
};

my_method()@qualified_clock_rise_e is {
    var a : uint;
    ...
    a = gen_a();
    ...
    a = gen_a();
    ...
    a = gen_a();
    ...
};
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top