我有两个8位输入A
和B
,
input [7:0] A,B;
和9位输出F
,
output reg [8:0] F;
A
和B
合并并分配给F
,如下所示:
F <= ~(A^B);
如果A
等于8'hFF
,并且B
等于8'hF0
,为什么F
变成9'h1F0
而不是{{ 1}}?
答案 0 :(得分:5)
为什么输出9'h1F0而不是9'h0F0?
您将F定义为9位宽。因此,编译器会在进行任何操作之前 将右侧参数扩展为9位。
由于A和B都未签名,因此它们分别成为
A = 9'h0FF, B=9'h0F0.
EXOR给出9'h00F。补码则为9'h1F0。
请注意,如果将表达式放在{}之间,则宽度扩展不会发生:
F2 = {~(A^B)};
F2将为9'h0F0;
答案 1 :(得分:2)
因为 11.8.2部分评估表达式和 11.8.3部分评估IEEE 1800-2017 LRM分配,实际上表示操作数得到了扩展在执行任何操作之前,首先要匹配结果的大小。