я могу установить ограничения для переменной один раз и сгенерировать несколько раз в specman?
-
19-08-2019 - |
Вопрос
У меня есть переменная, которую я хочу сгенерировать несколько раз в одной и той же функции, каждый раз с одним и тем же набором ограничений. Могу ли я установить ограничения один раз и просто gen
это много раз? То есть вместо этого:
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...
Я бы хотел сделать это:
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...
Таким образом, если я хочу изменить ограничения a
, я должен сделать это только один раз.
Решение
Вы можете сделать это, сделав переменную членом экземпляра включающего объекта. Р>
a : uint;
keep a in [100..120];
my_method()@qualified_clk_rise_e is {
gen a;
...
gen a;
...
gen a;
};
Эта реализация не является поточно-ориентированной, если несколько my_method () работают на одном и том же объекте в одно и то же время. Вы можете сделать это [specman] поточно-безопасным, назначив сгенерированное 'a' для 'my_a в рамках метода:
var my_a : uint;
gen a;
my_a = a;
Или вы можете просто написать метод для генерации '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();
...
};