posso impostare i vincoli per una variabile una volta e generare alcune volte in specman?

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

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

È stato utile?

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
scroll top