SystemVerilog:配列のシステムタスク(ファンクション)

SystemVerilogでは、以下のような配列に対して
用意されているシステムタスクがあります。
$dimension - 配列の次元数を返す。
$left - 指定した次元の、最上位ビット(MSB)番号を返す。
$right - 指定した次元の、最下位ビット(LSB)番号を返す。
$low - 指定した次元の最も低いビット番号を返す。
$high - 指定した次元の最も高いビット番号を返す。
$size - 指定した次元に含まれる要素の合計($high - $low +1)
$increment - $left >= $right以上である場合には 1を返し、$left < $rightだと -1

サンプルコード


 1|module tb;
 2|
 3|  logic[15:0] hoge[8:1];
 4|  int tmp;
 5|
 6|  initial begin
 7|    for(int i=0;i<8;i++) begin
 8|      hoge[i+1] = 2 << i;
 9|      $display("hoge[%1d] = 0x%h", i+1, hoge[i+1]);
10|    end
11|    tmp = $dimensions(hoge);  $display("dimension is %2d", tmp);
12|    tmp = $left(hoge,1);      $display("left      is %2d", tmp);
13|    tmp = $right(hoge,1);     $display("right     is %2d", tmp);
14|    tmp = $low(hoge,1);       $display("low       is %2d", tmp);
15|    tmp = $high(hoge,1);      $display("high      is %2d", tmp);
16|    tmp = $size(hoge,1);      $display("size      is %2d", tmp);
17|    tmp = $increment(hoge,1); $display("increment is %2d", tmp);
18|    #100;
19|    $finish;
20|  end
21|
22|endmodule

実行結果


# vsim -L work -do {run -all; quit} -c tb 
# Loading sv_std.std
# Loading work.tb
# run -all
# hoge[1] = 0x0002
# hoge[2] = 0x0004
# hoge[3] = 0x0008
# hoge[4] = 0x0010
# hoge[5] = 0x0020
# hoge[6] = 0x0040
# hoge[7] = 0x0080
# hoge[8] = 0x0100
# dimension is 2
# left is 8
# right is 1
# low is 1
# high is 8
# size is 8
# increment is 1

関連記事

コメントの投稿

非公開コメント

プロフィール

Kocha

Author:Kocha
なんでもチャレンジ!(^o^)/
E-mail
github:Kocha
イベントカレンダー

カレンダー
06 | 2017/07 | 08
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
カテゴリ
OVP (4)
最新記事
最新コメント
アーカイブ
リンク
Twitter
アクセス人数