SystemVerilog 0 与 '0 有何不同?

How is SystemVerilog 0 different from '0?

在执行以下 SystemVerilog 代码时(使用 Questa 编译并 运行)

bit [7:0] test = 255;
$display("%b %b %b", test,        test == 255,      test == '1);
$display("%b %b %b", ~test,       ~test == 0,       ~test == '0);
$display("%b %b %b", 8'b00000000, 8'b00000000 == 0, 8'b00000000 == '0);

输出是

11111111 1 1
00000000 0 1
00000000 1 1

我的问题是关于第二行输出的第二个数字:二进制 00000000 与 0 有何不同?为什么只有当它是 ~test 的结果时才不同,而不是当它是文字时?这是 Questa 错误还是语言的 属性?

区别在于0,没有任何宽度前缀默认为32位值。在等式中,在计算 LHS 和 RHS 表达式之前,操作数的大小会调整为表达式之间的最大宽度。试试 ~test == 9'h0~test == 9'h100 看看你得到了什么。

'0 的大小取决于其上下文。所以 ~test =='0 在这种情况下变成 ~test == 8'b0