检查是否所有位都设置在 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
和 'z
是 fill 文字(参见第 5.7 节.1 IEEE 1800-2017 SystemVerilog LRM中的整型文字常量)。使用表达式位宽的规则(第 11.6.1 节),这些文字被填充到所有 0、1、x 或 z 的确定宽度。在本例中,宽度为 array
。在自定上下文中,即独立文字,它们只是一个数字。
我正在查看一些 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
和 'z
是 fill 文字(参见第 5.7 节.1 IEEE 1800-2017 SystemVerilog LRM中的整型文字常量)。使用表达式位宽的规则(第 11.6.1 节),这些文字被填充到所有 0、1、x 或 z 的确定宽度。在本例中,宽度为 array
。在自定上下文中,即独立文字,它们只是一个数字。