我修改了dave_59在this answer中编写的代码块,以创建一个病态案例来说明我的问题:
virtual class base;
???
endclass
class my_class#(int width) extends base;
typedef bit [width-1:0] vec_t;
virtual function vec_t get_zeros();
vec_t x = '0;
return x;
endfunction
endclass
base my_array [1:3];
initial begin
my_array[1] = my_class#(1)::new;
my_array[2] = my_class#(2)::new;
my_array[3] = my_class#(3)::new;
...
有没有办法循环执行上述操作?像这样的东西是我想要的,虽然它不起作用,因为 SV 需要静态定义类参数:
for (int i=1; i<=3; i++)
my_array[i] = my_class#(i)::new;
我认为生成块会起作用,但我无法弄清楚编译的语法。我也不确定基类中需要什么(或者我什至是否需要基类)。