Parameterized classes

classに対して、parameterを渡すことができます。

渡すことができるのは、

1)、数値

2)、型

1)の例を下記に示します。

#( int size = 1)のようにすることで、数値をパラメータとして渡すことができます。

この例では、型がintで名前がsizeというパラメータを定義し、デフォルト値として1を指定しています。

class parameter_class #(int size = 1);

bit [size-1:0] addr;

endclass

使い方は、次のようになります。

parameter_vector #(8) pc_8; // size = 8 object with vector of size 10

parameter_vector #(.size(16)) pc_16; // もうひとつのやり方

2番目の使い方は、パラメータの一部に対して値を設定するときに便利です。

2)の例を下記に示します。

#( type T int)のようにすることで、型をパラメータとして渡すことができます。

この例では、型がintで名前がTを指定しています。

class parameter_stack #(type T = int);

local T items[];

task push( T a ); ... endtask

task pop( ref T a ); ... endtask

endclass

使い方は、次のようになります。

parameter_stack #(logic[7:0]) l_ps; // 8ビットのlogicのスタック