检查是否所有位都设置在 SystemVerilog 中的打包数组中

Checking if all bits are set in a packed array in SystemVerilog

我正在查看一些 SystemVerilog 代码,我遇到了这个表达式来测试是否设置了打包数组中的所有位。

logic [SIZE-1:0]                   array;

// Bool we are evaluating:
array == '1;

谁能给我解释一下这是怎么回事?据我所知,'1 被视为有符号整数,所以它可能被符号扩展为全 1?只是想在我的脑海中理解这段代码片段。

是的,'1 表示法是将所有位设置为 1 的便捷方式,即使是在您的代码中进行比较也是如此。这里有一个小例子来演示:

module tb;

parameter SIZE = 3;
logic [SIZE-1:0] array;

initial begin
    for (int i=0; i<8; i++) begin
        array = i;
        if (array == '1) begin
            $display("true  %b", array);
        end else begin
            $display("false %b", array);
        end
    end
end

endmodule

打印:

false 000
false 001
false 010
false 011
false 100
false 101
false 110
true  111

IEEE Std 1800-2017,第 5.7.1 节 整数文字常量,对此进行了讨论:

An unsized single-bit value can be specified by preceding the single-bit value with an apostrophe ( ' ), but without the base specifier. All bits of the unsized value shall be set to the value of the specified bit.

'0'1'x'zfill 文字(参见第 5.7 节.1 IEEE 1800-2017 SystemVerilog LRM中的整型文字常量)。使用表达式位宽的规则(第 11.6.1 节),这些文字被填充到所有 0、1、x 或 z 的确定宽度。在本例中,宽度为 array。在自定上下文中,即独立文字,它们只是一个数字。