SystemVerilog 0与0的不同之处是什么?

时间:2017-04-12 14:29:12

标签: system-verilog

执行以下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错误还是该语言的属性?

1 个答案:

答案 0 :(得分:4)

区别在于0,没有任何宽度前缀默认为32位值。在相等的情况下,在评估这些表达式之前,操作数的大小将达到LHS和RHS表达式上的表达式之间的最大宽度。试试~test == 9'h0~test == 9'h100,看看你得到了什么。

'0的大小取决于其背景。因此~test =='0在此上下文中变为~test == 8'b0