1

我正在阅读有关 Verilog 数据流编程的信息。

我已经了解了数据流模型的延迟,但现在我对它有一些误解。我发现在数据流模型中,我们有拒绝延迟模型。换句话说,对于assign #2 c= a | b,可以拒绝更改。

我的问题是输入更改何时会被拒绝?
我敢肯定,当ab改变使c期望值改变时,我们应该再次启动 2 单位延迟!

我的问题是,我们是否需要在更改ab更改但预期c没有更改时再次开始延迟?

例如,a | b“a”为 0,“b”为 1,有时我们会将“a”更改为 1。是否需要拒绝先前的时间并再次启动 2 单位延迟以查看输出中的 1?(注意,expectedc不会改变,因为我们的操作是|)。

4

1 回答 1

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 之前没有数据。在时间 7 和 15 开始ab的脉冲ab被过滤掉,因为它们小于 2 个时间步。所有其他的转换c都是时间上的 2 移位ab

a在时间 25 变高时没有拒绝时间,因为中间步骤 ( ab) 没有转换。模拟器将执行自己的中间步骤,a | b在决定应该执行什么操作之前评估更改c

于 2013-01-10T19:06:49.023 回答