¿Puedo establecer las restricciones para una variable una vez y generar algunas veces en specman?

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

  •  19-08-2019
  •  | 
  •  

Pregunta

Tengo una variable que quiero generar algunas veces en la misma función, cada vez con el mismo conjunto de restricciones. ¿Puedo establecer las restricciones una vez y solo gen muchas veces? Es decir, en lugar de esto:

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

Me gustaría hacer esto:

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 esa manera, si quiero cambiar las restricciones de a solo tengo que hacerlo una vez.

¿Fue útil?

Solución

Puede hacer esto haciendo que la variable sea un miembro de instancia del objeto adjunto.

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

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

Esta implementación no es segura para subprocesos si se ejecutan múltiples my_method () en el mismo objeto al mismo tiempo. Puede hacer que [specman] sea seguro para subprocesos asignando la 'a' generada a 'my_a 'dentro del alcance del método:

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

O simplemente puede escribir un método para generar '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();
    ...
};
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top