1

同じ制約セットを使用して、同じ関数で数回生成したい変数があります。制約を 1 回だけ設定して、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そうすれば、 s の制約を変更したい場合でも、一度だけ行う必要があります。

4

1 に答える 1

1

これを行うには、変数を囲んでいるオブジェクトのインスタンス メンバーにします。

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

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

複数の my_method() が同じオブジェクトで同時に実行されている場合、この実装はスレッドセーフではありません。メソッドのスコープ:

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();
    ...
};
于 2008-12-13T02:50:50.847 に答える