Answers:
在您的示例中,您隐式地截断了位。
明确表示截断通常可以消除模拟/皮棉/综合中的警告。
内联执行此操作的一种方法是使用强制转换运算符,例如:
typedef logic [15:0] HALF_WORD;
assign x = HALF_WORD'((func(A) ^ func(B));
如果从上下文中可以明显看出所有丢失的位均为0,则此方法可能有意义。
如果某些位可能不为零,那么我建议仍使用先前答案中建议的@dwikle之类的中间网络,因为这样可以更清楚地表明您实际上是在丢弃这些位。这里再次供参考。
wire[31:0] y;
assign y = func(A) ^ func(B);
assign x = y[15:0];
我认为这可能有助于减少生产线数量。
wire [15:0] not_used ;
assign {not_used, x} = (func(A) ^ func(B));
虽然不确定这是否与分配有效。