クラスを定義するとき、まだ決まっていないデータの型があれば、それをパラメタライズによって解決することが出来ます。パラメタライズは、module宣言時などと基本的には同じですが
class $class_name #(type $type_name = $初期型)
のように書きます。
例:
class test_class #(type T=int); T ia;endclasstypeのパラメタライズは、ユーザ定義クラスも使えます。今回の例では、パケットを定義したクラスにおいて、payloadサイズをパラメタライズしてみます。元の定義はbit [31:0]だったので、typeの初期型を同じようにして、
bit [31:0] payload [$];
を
T payload [$]
にしました。また、インスタンス時に型をbyteに変更しているので、実行結果は1byte分のデータが変化するだけとなっています。
--- test.sv ---
実行結果は、
# ==================================# header : 00h# payload[0] : 00000024h# payload[1] : 00000081h# payload[2] : 00000009h# payload[3] : 00000063h# ==================================# header : 01h# payload[0] : 0000000dh# payload[1] : 0000008dh# payload[2] : 00000065h# payload[3] : 00000012h# ==================================# header : 02h# payload[0] : 00000001h# payload[1] : 0000000dh# payload[2] : 00000076h# payload[3] : 0000003dh# ==================================# header : 03h# payload[0] : 000000edh# payload[1] : 0000008ch# payload[2] : 000000f9h# payload[3] : 000000c6h