2013-01-09 61 views
1

我念叨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不会改变)。

回答

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___/ \______/  \___/ 

首先2的c时间的步骤是未知的,因为有时间0之前ab没有数据上ab开始在时间7和15的脉冲将被过滤掉,因为它们不太然后2时间脚步。 c中的所有其他转换在时间ab之间转移2。

a由于中间步骤(ab)没有转换而在时间25时变高,因此没有拒收时间。模拟器将执行其自己的中间步骤,在决定c应执行哪些操作之前,对a | b上的更改进行评估。