在执行以下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错误还是语言的属性?
发布于 2017-04-12 15:12:57
区别在于没有任何宽度前缀的0
默认为32位值。在相等的情况下,操作数在计算LHS表达式和RHS表达式之间的最大宽度时才计算这些表达式。试试~test == 9'h0
和~test == 9'h100
,看看你得到了什么。
'0
的大小取决于它的上下文。因此,在这种情况下,~test =='0
变成了~test == 8'b0
。
https://stackoverflow.com/questions/43372468
复制相似问题