я могу установить ограничения для переменной один раз и сгенерировать несколько раз в specman?

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

  •  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();
    ...
};
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top