在 System Verilog 中声明可变宽度的数组

问题描述 投票:0回答:1

我知道数组宽度是在编译时分配的,但我有一个场景,我需要根据约束设置数组宽度。设置可变数组宽度的替代方法有哪些?在下面的示例代码中,我需要根据 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
verilog system-verilog
1个回答
0
投票

有多种不同的方法来处理这个问题,具体取决于您打算做什么

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
声明为以最大可能宽度填充,然后屏蔽掉不需要的位。

© www.soinside.com 2019 - 2024. All rights reserved.