systemVerilog中的位求反

systemVerilog中的位求反,verilog,system-verilog,Verilog,System Verilog,在下面的代码中,我希望“b”是2'b00,因为“a”的位比“b”少,并且它们是无符号的wire。然而,在模拟结果中,“b”是2'b10 wire a; wire [1:0]b; assign a = 1'b1; assign b = ~a; wire a; wire [2:0]b; assign a = 1'b1; assign b = ~a; 我尝试将“b”设置为宽度3,这次“b”是3'b110 wire a; wi

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

  wire      a;
  wire [1:0]b;

  assign a = 1'b1;
  assign b = ~a;
  wire      a;
  wire [2:0]b;

  assign a = 1'b1;
  assign b = ~a;
我尝试将“b”设置为宽度3,这次“b”是
3'b110

  wire      a;
  wire [1:0]b;

  assign a = 1'b1;
  assign b = ~a;
  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
用0扩展,变成
2'b01
。而且,
~(2'b01)
2'b10

  wire      a;
  wire [1:0]b;

  assign a = 1'b1;
  assign b = ~a;
  wire      a;
  wire [2:0]b;

  assign a = 1'b1;
  assign b = ~a;
b
为3位宽时也是如此

参考IEEE标准1800-2017第11.6.2节表达式位长度问题示例