キュー(Queue)

機能概要

キューは伸縮自在のアレイです。FIFOとして利用することもできます。
型名 変数名[$] の形で表します。

例 int型で変数名がq0  → int q0[$]

主な使用方法

1.初期化
q={} 

2.キューのサイズ確認
q.size()

3.データの挿入
・q.push_fromt(代入する値) qの先頭に”代入する値”が挿入されます。
・q.push_back (代入する値) qの一番後ろに”代入する値”が挿入されます。
・q.inseert(数値)  数値のインデックスの個所にデータを挿入します。

4.データの取り出し
・q.pop_front()     qの先頭の値を取り出します。
・q.pop_back()     qの最後の値を取り出します。

5.データの削除
q.delete(数値)   数値のインデックスを削除します。

記述例と実行結果

記述例

コードの内容は、

int型のキューq0を宣言します。

10個データが入るキューを作成し、キューのインデックスに0から9までを代入します。

t_displayタスクを作成し、キュー情報を表示します。

pop_frontで先頭のインデックスを取り出し、pushu_backで最後尾のインデックスに100を挿入しています。deleteでインデックス5を削除しています。

module test () ;
  int q0[$] ;

  
initial begin
    for(int iii=0;iii<10;iii++) begin
      q0[iii] = iii ;
    end

    t_display() ;

  
    q0.pop_front() ;
    t_display() ;

    q0.push_back(100);
    t_display() ;
   

    q0.delete(5) ;
    t_dsiplay() ;

  end

//表示用タスク
  task t_display() ;
    $display("size=%d",q0.size() ) ;
    for (int iii=0;iii<q0.size();iii++) begin
      $display("q0[%d]=%d",iii,q0[iii]) ;
    end
  endtask

endmodule

実行結果

実行結果


for文実行後のt_display
size=10
q0[0] = 0
q0[1] = 1
q0[2] = 2
q0[3] = 3
q0[4] = 4
q0[5] = 5
q0[6] = 6
q0[7] = 7
q0[8] = 8
q0[9] = 9

pop_front実行後
size=9
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

push_back(100)実行後
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[0] = 100

delete(5)実行後
size=9
q0[0] = 1
q0[1] = 2
q0[2] = 3
q0[3] = 4
q0[4] = 5
q0[5] = 7
q0[6] = 8
q0[7] = 9
q0[8] = 100

その他

1.コピー

キューを別のキューにコピーできます。

キューのコピーの記述例

int q0 , q1 ;

q1 = q0 ;

2.構造体のキュー

int型以外にbitやlogicでもキューは利用できます。

また、構造体でもキューが利用できます。

構造体を宣言するときにキューの型で宣言することで、構造体の情報をキューに入れることができます。


typedef struct {
logic [2:0] aaa_id ;
logic [4:0] aaa_no ;
bit yyyy ;
} st_xxx ;

st_xxx st_xxx0 ,st_q[$] ;

st_q[$].push_back(st_xxx0) ;

コメント

Copied title and URL