我是 Verilog 的新手。在做实验作业时(是的,我已经阅读了这里的家庭作业政策),我遇到了一个条件语句(三元运算符)。
assign w1 = load ? in : out;
我知道每当右侧发生任何变化时都会分配更新。在这种情况下,每当
load
、in
或 out
发生变化时,是否会分配更新 w1?或者当 load
改变时分配更新only?
实验作业是为了实现寄存器。这个问题与寄存器实现没有直接关系,因此我可以放心地在这里要求澄清。我在 assign
上找到的所有
文档都表明,只要右侧的任何操作数发生变化,它就会更新。这如何应用于三元运算符?
从逻辑上讲,该语句相当于两个“或”“与”门,正确的是((load and in)or(~load and out))?
谢谢。
我希望分配仅在
load
发生变化时才会更新。我使用该语句的情况有点令人困惑,无法隔离所使用的行为,所以我很好奇向了解更多的人学习。
我也有兴趣了解逻辑等价物。
了解右侧有 评估,左侧有更新。
只要右侧表达式中的任何信号有更新,就会安排评估。对于任何带有任何运算符的表达式都是如此。如果 RHS 上的评估导致 LHS 上的值发生变化,则会安排对 LHS 的更新。
在您的示例中,如果
load
为 true 并且 in
为 0,则 w1
将被驱动为 0。当 in
更新为 1,并且没有其他任何更改时,您会希望 w1
更改为1也。
有关三元运算符背后的逻辑,请参阅这个答案。