2016-09-16 77 views
2

{a + b}(a + b)のVerilogの違いは何ですか?私は何をするシミュレーションを使用した:Verilogでビット幅が異なる

reg [3:0] a = 4'b0001; 
reg [3:0] b = 4'b1111; 
reg [4:0] c = (a + b); give the result c = 5'b1_0000 

しかし

reg [4:0] c = {a + b}; give c = 5'b0_0000; 

それは(A + B)結果を与えることができる5ビットを意味するが、{A + B} 4ビットを与えます。どうしてか分かりません。私を助けてください。

ありがとうございました

+2

なぜ連結演算子を使用しますか? – toolic

+0

私は、連結演算子を使用するとなぜ出力が異なるのかという疑問があると思います。これは決して答えではありませんが、aとbの両方が4ビット幅であるという事実は、使用されている連結演算子に関連する問題の一部です。 aとbを5ビット幅にすることで期待される動作が得られることを証明することは価値があるかもしれません。その時点で、連結演算子が結果幅をどのようにスライスするかがわかります。 –

+0

私には分かりませんが、連結によって結果は4ビットになります、私はこれを使って4ビット信号に割り当てます。 –

答えて

3

連結の各式は自己決定されています。 {expr1,expr2, ...}。あなたの例では、ただ1つの式があり、それはちょうどa + bです。セクションによると、IEEE 1800-2012 LRMの式ビット長によれば、自己決定コンテキストのL(a + b)はMax(L(a)、L(b))であり、これは4ビットである。それ以外の場合は、割り当てのコンテキストでは5ビットです。

関連する問題