问题描述
在下面的代码中,我期望“ 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
左扩展为0,成为2'b01
。而且,~(2'b01)
是2'b10
。
b
为3位宽时也是如此。
请参阅IEEE Std 1800-2017,第11.6.2节表达式位长问题的示例。