我正在阅读有关Verilog数据流编程的文章。
我已经了解了数据流模型的延迟,但现在我对它有一些误解。我发现在数据流模型中我们有拒绝延迟模型,换句话说,assign #2 c= a | b
更改可以被拒绝。
我的问题是输入更改何时会被拒绝? 我确信当a或b发生变化时,c预期值会发生变化,而我们应该再次开始2单位延迟!
我的问题是,当a或b改变但是预期的c没有改变时,我们是否需要再次启动延迟?
例如在a or b
中,“a”为0,“b”为1,有时我们将“a”更改为1.是否需要拒绝之前的时间并再次启动2个单位延迟看到输出中的1? (请注意,预期的c不会改变,因为我们的操作是或)。
答案 0 :(得分:2)
模拟器将首先评估表达式的LHS(左侧),然后在RHS(右侧)上应用更改变量。拒绝(或过滤)由LHS表达的结果决定。
要想象这一点,请在a | b
之间添加一个中间步骤。
assign ab = a | b;
assign #2 c = ab;
运行它认为模拟生成波形。示例输出:
0 5 10 15 20 25
| | | | | |
_ _ __
a ___/ \__________/ \______/
__ _____
b _______/\___/ \______/
_ __ _ _____
ab ___/ \_/\___/ \/ \___/
_ _____ ___
c xx___/ \______/ \___/
c
的前两个步骤未知,因为在时间0之前没有ab
的数据。从{7}开始的脉冲在时间7和15开始被滤除,因为它们是少于2个时间步。 ab
中的所有其他转换在时间c
中移位了2。
ab
在时间25变高时没有拒绝时间,因为中间步骤(a
)没有过渡。模拟器将执行自己的中间步骤,在决定ab
中应执行哪些操作之前评估a | b
上的更改。