【发布时间】:2019-06-23 20:25:43
【问题描述】:
最好先给变量赋值,然后在 if 块中重新赋值,而不是使用 if-(else if)-else 块,其中 if 和 else 块中的赋值相同,else if 中的赋值块是不同的分配。
always @(*) begin
if condition1 begin
var = val1;
end
else if condition2 begin
var = val2;
end
else begin
var = val1;
end
end
对
always @(*) begin
var = val1;
if condition2 begin
var = val2;
end
end
鉴于条件 1 和条件 2 是互斥的,我认为这两个块应该综合相同的逻辑,并且选择一个而不是另一个纯粹是审美。我的想法是正确的,还是一种实现的合成方式与另一种不同?如果我的想法是正确的,社区更喜欢哪种方法?
编辑:在 racraman 的评论之后添加了互斥标准。
【问题讨论】:
-
两个代码块不一样;如果条件 1 和条件 2 都为真,则第一个返回 val1,而第二个返回 val2。
-
你是对的。如果条件1 和条件2 互斥怎么办?在那种情况下他们会合成相同的东西吗?
-
Yes a 或将第二个代码块更改为“if condition2 && !条件1”。顺便说一句,我更喜欢第二种,所以可能很快就会写一个答案:)
-
合成如何知道条件是互斥的?在您的情况下,将综合不同的逻辑。但案例 2 将与
if(condition2) var=val2; else var = val1;相同 -
有什么理由不考虑
var = !condition1 && condition2 ? val2 : val1;(作为第一个示例的替代)或var = condition2 ? val2 : val1;(第二个示例)之类的东西吗?因为最终它将成为某种多路复用器,这样人们就可以直接“看到”它。
标签: logic verilog hardware hdl