キューで使用できるMethod

sort

キューに対してソートが実行できます。

以下、10,9,8,・・・とインデックスに値を入れたキューに対してsortを実行した例です。

module test ()  ;
int q0[$] ,q1[$],q2[$];
int a00 ;
initial begin 
//q0キューの初期化 10,9,8,
  for(int iii=0;iii<10;iii++) begin  
    q0[iii] = 10-iii ;
  end
//q0キューの確認
  t_display(q0) ;

  q0.sort()
  $display("--SORT--") ;
  t_display(q0) ;
end
task t_display(q[$]=q0,string="q0") ;
  string q_name ;
  q_name = qs ;
  $display("size=%d",q.size() ) ;
  for (int iii=0;iii<q.size();iii++) begin
     $display("%s[%d]=%d",q_name, iii, q[iii]) ;
  end
endtask
endmodule 

実行結果

size=10
q0[0]=10
q0[1]= 9
q0[2]= 8
q0[3]= 7
q0[4]= 6
q0[5]= 5
q0[6]= 4
q0[7]= 3
q0[8]= 2
q0[9]= 1
--SORT--
size=10
q0[0]= 1
q0[1]= 2
q0[2]= 3
q0[3]= 4
q0[4]= 5
q0[5]= 6
q0[6]= 7
q0[7]= 8
q0[8]= 9
q0[9]=10

findとfind_index

findは検索条件に一致する要素を返します。
以下の例は、キューq0の中で、3より小さい値を持つインデックスを取得し、q1というキューに代入します。

module test () ;
int q0[$],q1[$] ;
・・・・
initial begin
//q0キューの初期化
  for(int iii=0;iii<10;iii++) begin  
    q0[iii] = 10-iii ;
  end
q1 = q0.find with (item < 3) ;
 t_display(q1,"q1") ;
end
・・・・

実行結果

q0[8]と q0[9]の値がそれぞれ3より小さい2と1なのでこの値を持つキューとなります。

size= 2
q1[0]= 2
q1[1]= 1

find_indexはインデックスに対して条件を設定します。

module test () ;
int q0[$],q1[$] ;
・・・・
initial begin
//q0キューの初期化
  for(int iii=0;iii<10;iii++) begin  
    q0[iii] = 10-iii ;
  end
q1 = q0.find_index() with (item < 3) ;
 t_display(q1,"q1") ;
end
・・・・

実行結果

q1 = q0.find with (item < 3) ;の文に対してfindをfind_indexに対して実行するので、

インデックスの3番目より小さいインデックス(1番目と2番目)がキューに代入されます。

size= 2
q1[0]= 9
q1[1]= 8

sum

sumはキューのよその和を返します。

module test() ;
int q0[$],q1[$] ;
int a00 ;
・・・・
  initial begin
  //q0キューの初期化
    for(int iii=0;iii<10;iii++) begin  
      q0[iii] = 10-iii ;
    end
    q1 = q0.find_index() with (item < 3) ;
    a00 = q1.sum() ;
    $display("q1 sum=%d",a00) ;
end
・・・・
endmodule 

実行結果

q1[0]の値は9、q1[1]の値は8なので17が表示されます。

q1 sum=17

reverse

reserveはキューのインデックス番号の逆順にデータを入れ替えます。

module test () ;
・・・・
  initial begin
    for(int iii=0;iii<10;iii++) begin  
      q0[iii] = 10-iii ;
    end
    t_display(q0,"q0") ;
    q0.reverse() ;
    $display("--REVERSE--") ;
    t_display(q0,"q0") ;
・・・・
endmodule

実行結果

size=10
q0[0]=10
q0[1]= 9
q0[2]= 8
q0[3]= 7
q0[4]= 6
q0[5]= 5
q0[6]= 4
q0[7]= 3
q0[8]= 2
q0[9]= 1
--REVERSE--
size=10
q0[0]= 1
q0[1]= 2
q0[2]= 3
q0[3]= 4
q0[4]= 5
q0[5]= 6
q0[6]= 7
q0[7]= 8
q0[8]= 9
q0[9]=10

shuffle

shuffleはキューの値をランダムに並べ替えます。

module test () ;
・・・・
  initial begin
    for(int iii=0;iii<10;iii++) begin  
      q0[iii] = 10-iii ;
    end
    t_display(q0,"q0") ;
    q0.shuffule() ;
    $display("--SHUFFLE--") ;
    t_display(q0,"q0") ;
・・・・

実行結果

size=10
q0[0]=10
q0[1]= 9
q0[2]= 8
q0[3]= 7
q0[4]= 6
q0[5]= 5
q0[6]= 4
q0[7]= 3
q0[8]= 2
q0[9]= 1
--SHUFFLE--
size=10
q0[0]= 4
q0[1]= 5
q0[2]= 2
q0[3]= 8
q0[4]= 1
q0[5]= 9
q0[6]= 7
q0[7]= 6
q0[8]= 10
q0[9]= 3

コメント

Copied title and URL