Verilog数据流延迟模型

时间:2013-01-09 19:43:50

标签: verilog

我正在阅读有关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不会改变,因为我们的操作是或)。

1 个答案:

答案 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上的更改。