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
。
在执行以下 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
。