2015-04-03 91 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