连接verilog中的奇怪事情

连接verilog中的奇怪事情,verilog,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;

我在
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位

LHS:

  • fb
    是64位宽[63:0]
RHS:

  • 1
    为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