systemVerilog中的位求反
在下面的代码中,我希望“b”是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
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节表达式位长度问题示例