串联verilog中的奇怪事情
strange thing in concatenation verilog
我在 verilog
中有一个模块,它获取两个 64 位数字。这些数字是随机的。奇怪的是,我调试的时候,fa
是正确的,是1开头的,但是fb
竟然是0开头的。
有什么问题吗?
module adder(sum,a, b);
input [63:0] a;
input [63:0] b;
reg one;
output reg [63:0] sum;
reg [63:0] fa,fb;
always @(a or b) begin
one=1'b1;
fb={one,b[51:0],12'b0};
fa={one,a[51:0],12'b0};
sum=64'b1;
end
endmodule
此赋值中存在位宽不匹配:
fb={one,b[51:0],12'b0};
左侧 (LHS) 为 64 位宽,但右侧 (RHS) 为 65 位宽。
左轴:
fb
是 64 位宽 [63:0].
右手:
one
是 1 位宽
b[51:0]
是 52 位宽
12'b0
是 12 位宽
(1+52+12=65)
one
被忽略,因为 fb[11:0]=12'b0 和 fb[63:12]=b[51:0]。因此,如果b[51]=0,则fb[63]=0.
fa
也是如此。
我在 verilog
中有一个模块,它获取两个 64 位数字。这些数字是随机的。奇怪的是,我调试的时候,fa
是正确的,是1开头的,但是fb
竟然是0开头的。
有什么问题吗?
module adder(sum,a, b);
input [63:0] a;
input [63:0] b;
reg one;
output reg [63:0] sum;
reg [63:0] fa,fb;
always @(a or b) begin
one=1'b1;
fb={one,b[51:0],12'b0};
fa={one,a[51:0],12'b0};
sum=64'b1;
end
endmodule
此赋值中存在位宽不匹配:
fb={one,b[51:0],12'b0};
左侧 (LHS) 为 64 位宽,但右侧 (RHS) 为 65 位宽。
左轴:
fb
是 64 位宽 [63:0].
右手:
one
是 1 位宽b[51:0]
是 52 位宽12'b0
是 12 位宽
(1+52+12=65)
one
被忽略,因为 fb[11:0]=12'b0 和 fb[63:12]=b[51:0]。因此,如果b[51]=0,则fb[63]=0.
fa
也是如此。