inside
insideは指定した範囲でランダムを実行したい場合に使用します。
constraint 制約名 { 制約を設定する変数 inside {ランダマイズで生成されるデータの範囲を指定} ; }
記述例
int型のa00に対して2から10までの範囲を指定しています。
int型のb00に対してa00の値からa00の2倍の数値までを範囲に指定しています。
ランダマイズを10回実行し、つど結果を表示します。
class c_inside ;
randc int a00 ;
rand int b00 ;
constraint C01 { a00 inside {[2:10]} ; }
constraint C02 { b00 inside {[a00:a00*2]} ; }
endclass
module test ();
c_inside class00 ;
initial begin
class00 = new ;
for( int iii=0;iii<10;iii++) begin
class00.randomize() ;
$display("a00=%3d b00=%3d",class00.a00,class00.b00) ;
end
end
endmodule
実行結果
a00は2から10の間でランダムに発生しています。
b00はa00~2 ✕ a00の間でランダムに発生しています。
a00 = 6 b00 = 7
a00 = 10 b00 = 13
a00 = 2 b00 = 3
a00 = 7 b00 = 12
a00 = 4 b00 = 4
a00 = 3 b00 = 4
a00 = 8 b00 = 16
a00 = 9 b00 = 12
a00 = 5 b00 = 8
a00 = 5 b00 = 8
キューのサイズをinside
キューのサイズと値をランダムに設定することができます。
記述例
q00のサイズはa00の値で決定します。(2から10の値でランダム)
サイズ確定後に1から8の値をランダムに代入します。
class c_inside ;
randc int a00 ;
rand bit [3:0] q00[$] ;
constraint C01 { a00 inside { [2:10] }
q00.size == a00 ;
foreach (q00[iii])
q00[iii] inside { [1:8] } ;
}
module test () ;
c_inside class00 ;
initial begin
class00 = new ;
class00.randomize() ;
$display("q00 size=%3d",class00.a00) ;
for (int iii=0;iii<class00.q00.size();iii++) begin
$display("q00[%3h] = %3d",iii,class00.q00[jjj]) ;
end
end
endmodule
実行結果
a00は制約C01で2から10の間の値がランダムに選択されます。結果から今回は6となっています。
キューq00のサイズ分値をディスプレイします。q00[iii]の値はランダム制約で1から8と設定しています。
結果もその範囲に収まっていることがわかります。
q00 size= 6
q00[000] = 7
q00[001] = 7
q00[002] = 4
q00[003] = 3
q00[004] = 2
q00[005] = 2

コメント