randomize 制約 inside

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

コメント

Copied title and URL