我有两个8位输入A和B,
input [7:0] A,B;
Run Code Online (Sandbox Code Playgroud)
和一个9位的输出F,
output reg [8:0] F;
Run Code Online (Sandbox Code Playgroud)
A并被B组合并分配为F:
F <= ~(A^B);
Run Code Online (Sandbox Code Playgroud)
如果A等于8'hFF,并且B等于8'hF0,为什么F变得9'h1F0不9'h0F0?
为什么输出9'h1F0而不是9'h0F0?
您将F定义为9位宽。因此,编译器将在执行任何操作之前将右侧参数扩展为9位。
由于A和B均未签名,因此
A = 9'h0FF, B=9'h0F0.EXOR给出9'h00F。然后补码得到9'h1F0。
请注意,如果将表达式放在{}之间,则宽度扩展不会发生:
F2 = {~(A^B)};
Run Code Online (Sandbox Code Playgroud)
F2将为9'h0F0;