正确示例如下:
环境中有两个master, 所以设置大小为2的静态数组。
module test_random;
class randmize_master_base;
rand bit[31:0] addr;
rand bit[ 7:0] size;
rand bit[ 1:0] op;
endclass
class randmize_master;
rand randize_master_base r_master[2];
function new();
r_master[0] = new();
r_master[1] = new();
endfunction
constraint master_rand{
foreach(r_master[i]){
if(i==0) {r_master[i].addr inside{[10,100]};
r_master[i].size inside{1,2,4};
r_master[i].op inside{0,1};}
else {r_master[i].addr inside{[1150,1190]};
r_master[i].size inside{2,4,8};
r_master[i].op == 1;}
}
}
endclass
initial begin
randmize_master rand_master;
rand_master = new();
rand_master.randomize();
foreach(rand_master.r_master[i])begin
$display($time,"addr[%h]=%h, size[%h]=%h, op[%h]=%h", i, rand_master.r_master[i].addr,
i, rand_master.r_master[i].size, i, rand_master.r_master[i].op)
end
end
endmodule
上述new函数如果添加 r_master=new(); 会报错
Class constructor “new()” cannot be in used with static array.因为静态数组不需要分配空间
上述new函数如果为空, 会报错
Error-[CNST-NPE] Constraint null pointer error test_random.sv, 29 Accessing null pointer r_master[0] in constraints. Please make sure variable r_master[0] is allocated.Error-[NOA] Null object access test_random.sv, 31 The object at dereference depth 1 is being used before it was constructed/allocated. Please make sure that the object is allocated before using it.
因为没有为静态数组的元素分配空间