一 参数化类 Parameterized classes
有时候,定义一种这样的类是很有用的:通过传递不同的参数大小、或者参数类型,能够方便的建立各种object。而没有必要针对不同数据大小或者类型,写重复类似的代码。
例子:
class vector #(int size = 1);
bit [size-1:0] a;
endclass
vector #(10) vten; // object with vector of size 10
vector #(.size(2)) vtwo; // object with vector of size 2
typedef vector#(4) Vfour; // Class with vector of size 4
上面的例子,是把数据大小或者尺寸作为类的参数。下面的例子,将数据类型作为参数。
class stack #(type T = int);// 这里必须是已知的数据类型,包括 class 和 struct
local T items[];
task push( T a ); ... endtask
task pop( ref T a ); ... endtask
endclass
stack is; // default: a stack of ints
stack#(bit[1:10]) bs; // a stack of 10-bit vectors
stack#(real) rs; // a stack of real numbers