SystemVerilog 0 与 '0 有何不同?

Pie*_*yts 2 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);
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 的错误还是语言的属性?

dav*_*_59 5

不同之处在于0,没有任何宽度前缀默认为 32 位值。在等式中,在评估 LHS 和 RHS 表达式上的表达式之间的最大宽度之前,操作数的大小被调整。尝试~test == 9'h0~test == 9'h100看看你会得到什么。

的大小'0基于其上下文。所以~test =='0成为~test == 8'b0那个语境。

  • 所以你是说(在你的 9 位示例中)`test` 被扩展为 `9'h0ff` 然后反转为 `9'h100`?我正在考虑这样的事情,但我假设它会首先计算`~test`(即`8'h00`),然后将其扩展为`9'h000`。 (2认同)