posso impostare i vincoli per una variabile una volta e generare alcune volte in specman?
-
19-08-2019 - |
Domanda
Ho una variabile che voglio generare più volte nella stessa funzione, ogni volta con lo stesso insieme di vincoli. Posso impostare i vincoli una volta e solo il gen
più volte? Cioè, invece di questo:
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...
Mi piacerebbe fare questo:
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...
In questo modo, se voglio cambiare i vincoli di a
, devo farlo solo una volta.
Soluzione
Puoi farlo rendendo la variabile un membro di istanza dell'oggetto che lo racchiude.
a : uint;
keep a in [100..120];
my_method()@qualified_clk_rise_e is {
gen a;
...
gen a;
...
gen a;
};
Questa implementazione non è thread-safe se più my_method () sono in esecuzione sullo stesso oggetto allo stesso tempo. Puoi renderlo [specman] thread-safe assegnando il generato 'a' a 'my_a "nell'ambito del metodo:
var my_a : uint;
gen a;
my_a = a;
Oppure puoi semplicemente scrivere un metodo per generare '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();
...
};
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow