Verilog HDL 中的惯性延迟

Inertial delay in Verilog HDL

我找到了两个不同的来源,它们以两种不同的方式解释了 Verilog HDL 中的惯性延迟。

1) 第一个表示任何短于指定延迟的输入信号都将被忽略。

2) 第二个表示,如果输入之一发生变化,将在预定时间使用 that[=29= 处的输入信号值评估输出信号] 时间。

例如:考虑延迟缓冲区

assign #4 out = in;
initial
  begin
    in = 0;
 #5 in = 1;
 #1 in = 0;
 #1 in = 1;
  end

如果我们监控信号,这将导致

     0         5  6  7  8  9 10 11  
     |         |  |  |  |  |  |  |   
                __    _________________
in    _________|  |__|
                                  _____
out1) XXXXXXX____________________|
                            ___________
out2) XXXXXXX______________|

out1)忽略了"up"中输入的(5,6)脉冲和"down"状态中的(6,7)脉冲时间太短,只有1个时间单位。但是后来 "in" 熬夜了足够长的时间 (7,11),因此在 11 点时发生了变化。

out2) 计划在时间步 9 进行评估,因为输入在时间 5 发生变化。类似地,在时间 10 和 11 时 "in" 分别在时间 6 和 7 发生变化。因此,在第 9、10 和 11 时刻,"out" 在这些时刻取 "in" 的当前值,在这种情况下始终是 "up"。

哪个评价是对的?

找出答案的最简单方法 - 对其进行测试。让我们添加一个简单的行:

$monitor("%g out = %b", $time, out);

监控 out 信号和 运行 一些模拟器(例如 Riviera)。结果 will be:

 0 out = x
 4 out = 0
11 out = 1

所以你的第一种方法是正确的。

我建议您查看以下链接,以更好地了解如何在 Verilog 中实现惯性延迟和传输延迟:

pdf_1

pdf_2