执行以下 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);
Run Code Online (Sandbox Code Playgroud)
输出是
11111111 1 1
00000000 0 1
00000000 1 1
Run Code Online (Sandbox Code Playgroud)
我的问题是关于第二个输出行上的第二个数字:二进制00000000与 0 有何不同?为什么它只有在它是 的结果时才不同~test,而在它是文字时才不同?这是 Questa 的错误还是语言的属性?
不同之处在于0,没有任何宽度前缀默认为 32 位值。在等式中,在评估 LHS 和 RHS 表达式上的表达式之间的最大宽度之前,操作数的大小被调整。尝试~test == 9'h0并~test == 9'h100看看你会得到什么。
的大小'0基于其上下文。所以~test =='0成为~test == 8'b0那个语境。