¿Puedo establecer las restricciones para una variable una vez y generar algunas veces en specman?
-
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.
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();
...
};