systemVerilog 中的逐位求反

bit-wise negation in systemVerilog

在下面的代码中,我希望“b”是 2'b00,因为“a”的位数比“b”少,而且它们是无符号的 wire。但是,在模拟结果中,“b”是2'b10.

  wire      a;
  wire [1:0]b;

  assign a = 1'b1;
  assign b = ~a;

我试过将“b”设置为宽度3,这次“b”是3'b110

  wire      a;
  wire [2:0]b;

  assign a = 1'b1;
  assign b = ~a;

据我理解,如果RHS的位数比LHS少,那么LHS未使用的位应该为0。任何人都可以解释为什么会这样吗?

在第一种情况下,a 是 1 位宽,但 LHS (b) 是 2 位宽。对 b 的赋值强制所有值都为最大宽度 (2)。在按位求反之前,a 是 left-extended 加 0,变成 2'b01。而且,~(2'b01)2'b10.

b为3位宽时也是如此

参考 IEEE Std 1800-2017, section 11.6.2 Example of expression bit-length 问题.