0
を渡します[2:0] /ビット[3:0] /ビット[4:0] /ビット[5:0]など...systemVeilog私は、次の機能を有する未知のサイズのアレイを
コンパイルしようとすると、次のエラーが発生します。 [":予期せぬ構文エラー[、IDENTIFIERまたはTYPE_IDENTIFIERまたはNETTYPE_IDENTIFIERが必要です。
を渡します[2:0] /ビット[3:0] /ビット[4:0] /ビット[5:0]など...systemVeilog私は、次の機能を有する未知のサイズのアレイを
コンパイルしようとすると、次のエラーが発生します。 [":予期せぬ構文エラー[、IDENTIFIERまたはTYPE_IDENTIFIERまたはNETTYPE_IDENTIFIERが必要です。
[*]
は、ダイナミックアレイの正しい構文ではありません。[]
を使用してください。
配列はのディメンションでのみ動的になります。したがって、bit [] mem_array
を持つことはできませんが、bit mem_array[]
が必要です。
最後に、参照渡しを使用する関数は静的な有効期間を持つことはできません。つまり、と自動と宣言する必要があります。
function automatic void foo_arr_bit (int seed, ref bit mem[], string mem_name);
for (int i=0; i< mem.size(); i++)
mem[i] = my_randomize_int(seed, mem[i], mem_name);
endfunction: foo_arr_bit
編集:しかし、これらの変更を行っても、大きな問題に直面します。参照を渡すと厳密な型指定が必要になります。キャストは許可されていませんので、タイプ変換に関する問題があると思います。
さらに、参照渡しは実際には必要ありません。代わりにinout
を使用してください。
私の入力は、パックされていない配列です。 – sara8d
Systemverilogには動的なパックド配列がありません。パラメータ化可能なクラスを使用して関数をカプセル化することは、解決策になります。それ以上のことをここで:http://forums.accellera.org/topic/1177-how-to-pass-variable-sized-packed-arguments-to-a-taskfunction/ またはSIZEを関数に渡して、十分に大きなパック配列。 – Hida