コンストラクタ

SystemVerilogでは、C++のようにクラスにはコンストラクタ(constructor)が必要です。

コンストラクタは、new関数を定義することで実現します。

Sample_c s = new;

new関数は、次のように定義します。

function new();

...

endfunction

この例では、new関数は引数を持ちませんが、引数を持つこともできます。

function new( int a, int b );

...

endfunction

SystemVerilogでは、C++のように複数のコンストラクタを持つことはできません。

したがって、クラス定義では、new関数は1つだけ定義します。

new関数は関数ですが、戻り値の型を示す必要はありません。

すべてのクラスは、デフォルトのコンストラクタを持っています。

親クラスのコンストラクタ

デフォルトのコンストラクタは最初に、親クラスのコンストラクタを呼びます(super.new)。

その後に、自分が持っている各メンバー(プロパティ)の初期化を行います。

親クラスのコンストラクタが引数を必要とするとき、2つの方法があります。

1)、コンストラクタ(new関数)の中で親クラスのコンストラクタに対して、引数を指定する。

function new();

super.new(2);

endfunction

2)、クラス定義のときに、継承する親クラスにコンストラクタの引数を指定する。

class ExtendedClass extends BaseClass(2);

2)のケースの書き方は、あまり見たときはありません。