2008-12-05 12 views
1

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 juste le gen plusieurs fois? Autrement dit, au lieu de cela:Puis-je définir les contraintes pour une variable une fois et générer quelques fois dans specman?

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... 

Je voudrais faire:

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... 

De cette façon, si je veux changer a contraintes s je ne dispose que de le faire une fois.

Répondre

1

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

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

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

Cette mise en œuvre est thread-safe si plusieurs ma_methode() 's sont en cours d'exécution sur le même objet en même time.You peut le rendre thread-safe [specman] en attribuant l'élément « a » à 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 « un »:

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(); 
    ... 
}; 
Questions connexes