機能概要
キューは伸縮自在のアレイです。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) ;

コメント