2015-04-03 93 views
1

我有一个模块在verilog,它得到两个64位数字,这些数字是随机的,奇怪的是,当我调试它时,fa是正确的,并从1开始,但fb以0开头!有谁能够帮助我?串联verilog中的奇怪

它有什么问题?

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 
+0

发布您的测试台代码。请解释“fb从0开始”是什么意思? – toolic 2015-04-03 16:51:47

回答

3

有此分配中的比特宽度不匹配:

fb={one,b[51:0],12'b0}; 

的左手侧(左轴)是64个位宽,但是右侧(右轴)是65个比特宽。

LHS:

  • fb是64个位宽[63:0]。

RHS:

  • one是1个位宽
  • b[51:0]是52个位宽
  • 12'b0是12个位宽

(1 + 52 + 12 = 65)

由于fb [11:0] = 12'b0和fb [63:12] = b [51:0],所以忽略。因此,如果b [51] = 0,那么fb [63] = 0。

fa也是如此。

+1

非常感谢@toolic – user4615534 2015-04-03 17:34:02