我知道数组宽度是在编译时分配的,但我有一个场景,我需要根据约束设置数组宽度。设置可变数组宽度的替代方法有哪些?在下面的示例代码中,我需要根据 ABC 类中的变量“width”声明一个数组。
class ABC;
rand int width;
constraint c_w {width == 32;}
endclass
module tb();
initial begin
ABC cfg = new();
bit [(32*cfg.width)-1:0] array; //Error
array = 'h123;
$display("array=0x%h", array);
end
endmodule
有多种不同的方法来处理这个问题,具体取决于您打算做什么
array
。
由于您似乎想要 32 位的倍数,因此可以声明一个 32 位字的动态数组。
module tb();
ABC cfg;
bit [31:0] array[];
initial begin
cfg = new();
assert(cfg.randomize();
array = new[cfg.width];
assert(std::randomize(array)
foreach (array[i]) $display("array[%0i]=0x%h", i,array);
end
endmodule
另一种选择是将
array
声明为以最大可能宽度填充,然后屏蔽掉不需要的位。