verilog中{a + b}
和(a + b)
之间有什么不同。我用模拟来做:
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位。我不知道为什么。请帮帮我。
谢谢
答案 0 :(得分:3)
串联中的每个表达式都是自我确定的。 tns install
。在您的示例中,只有一个表达式,它恰好是{expr1,expr2, ...}
。根据IEEE 1800-2012 LRM中的 11.6表达式比特长度,自定义上下文中的L(a + b)是Max(L(a),L(b)),这是4位。否则,它在赋值的上下文中是5位。