Verilog HDL的惯性延迟

时间:2015-04-21 19:46:07

标签: verilog

我找到了两种不同的来源,用两种不同的方式解释了Verilog HDL的惯性延迟。

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

2)第二个说,如果其中一个输入发生变化,输出信号将在预定时间使用 时间的输入信号值进行评估。

例如:考虑延迟缓冲区

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个时间单位。但随后“在”中保持了足够长的时间(7,11),因此在11处变了。

out2)在时间步骤9安排评估,因为输入在时间5改变。类似地,在时间10和11,“in”分别在时间6和7改变。因此,在第9,10和11时,“out”在这些时间取“in”的当前值,在这种情况下总是“up”。

哪种评估是正确的?

2 个答案:

答案 0 :(得分:4)

最简单的方法 - 测试它。让我们添加一个简单的行:

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

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

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

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

答案 1 :(得分:1)

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

pdf_1

pdf_2