2016-09-16 1413 views
2

verilog中的{a + b}(a + b)有何不同。我用模拟做: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位宽的事实是与使用concat操作符相关的问题的一部分。证明让a和b变成5位宽可能是值得的,可以得到预期的行为。在那一点上,我认为这取决于连接运算符如何切割结果宽度。 –

+0

我不知道,但连接的结果将是4位,我用它来分配给4位信号。 –

回答

3

串联中的每个表达式都是自定义的。 {expr1,expr2, ...}。在你的例子中,只有一个表达式,它恰好是a + b。根据部分11.6 IEEE 1800-2012 LRM中的表达比特长度,自我确定上下文中的L(a + b)是4比特的Max(L(a),L(b))。否则,它在分配的上下文中是5位。