動的配列の使い方

Verilogでは配列の要素数は宣言時に指定する必要があったので何かと不便でしたが、SystemVerilogでは、要素数を自由に変更できる動的配列が使えます。

動的配列は下記のように『型 配列名[]』で宣言します。

  int dynamic_array[];

動的配列はクラスのため、newメソッドで初期化します。また、newメソッドを呼び出すたびに要素数を変更できます。ただし、この場合、配列の中身はクリアされます。

  dynamic_array =  new[要素数];

配列の中身を保持したまま要素数を変更したい場合は、下記のようにします。

  dynamic_array =  new[要素数](dynamic_array);

  int dynamic_array[];

  initial begin
    // new[n]でn個の要素を持つ配列を生成
    dynamic_array = new[5];


    // newメソッドを再度呼び出すと、配列は初期化される
    dynamic_array[0] = 'd1234;
    $display("%d", dynamic_array[0]);

    dynamic_array = new[10]; // newメソッドを再度呼び出す

    $display("%d¥n", dynamic_array[0]); // 初期化される


    // 中身を保持したまま要素数を変更したい場合は、new[要素数](配列名)とする
    dynamic_array[0] = 'd1234;
    $display("%d", dynamic_array[0]);

    dynamic_array = new[10](dynamic_array);

    $display("%d", dynamic_array[0]); // 初期化されない
  end

実行結果

# run -all
#        1234
#           0
#
#        1234
#        1234
# quit

なお、中身を保持したまま要素数を1つだけ増やしたい場合は、sizeメソッドを使って下記のように書けます。

  dynamic_array = new[dynamic_array.size+1](dynamic_array);