はじめに
同じランダム変数で複数パターンのconstraintを定義したいことがあります。
しかし、constraintが競合しているとrandomize()がFailします。そこで、constraint_modeを使用することで、使用しないconstraintをOFFできます。
使い方
<クラス変数>.<constraint>.constraint_mode(0 or 1);
// 0で<constraint>がOFF
// 1で<constraint>がON
constraint_mode()の戻り値は、現在のconstraintブロックのON/OFF状態です。
サンプル
constraintをON/OFFする
module top();
class sample;
rand int val;
constraint c1{
val == 1;
};
constraint c2{
val == 2;
};
endclass
sample a;
initial begin
a = new();
a.c1.constraint_mode(0);
a.c2.constraint_mode(1);
a.randomize();
$display("%d", a.val); // c2がONなので、valは2。
end
endmodule
constraintブロックの状態を確認する
module top();
class sample;
rand int val;
constraint c1{
val == 1;
};
constraint c2{
val == 2;
};
endclass
sample a;
initial begin
a = new();
a.c1.constraint_mode(1);
a.c2.constraint_mode(0);
a.randomize();
$display("%d", a.val); // c1がONなので、valは1。
$display("%d", a.c1.constraint_mode()); // c1はONなので1。
$display("%d", a.c2.constraint_mode()); // c2はOFFなので0。
end
endmodule
まとめ
constraint_modeについてまとめました。
コメント