执行以下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 :(得分:4)
区别在于0
,没有任何宽度前缀默认为32位值。在相等的情况下,在评估这些表达式之前,操作数的大小将达到LHS和RHS表达式上的表达式之间的最大宽度。试试~test == 9'h0
和~test == 9'h100
,看看你得到了什么。
'0
的大小取决于其背景。因此~test =='0
在此上下文中变为~test == 8'b0
。