veriloghdl中的惯性延迟

veriloghdl中的惯性延迟,verilog,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

我发现了两个不同的来源,用两种不同的方式解释了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)由于时间太短,忽略了处于“向上”状态的输入(5,6)脉冲和处于“向下”状态的(6,7)脉冲,只有1个时间单位。但后来“in”保持了足够长的时间(7,11),因此out在11时发生了变化

out2)计划在时间步骤9进行评估,因为输入在时间5更改。同样,在第10次和第11次中,“in”分别在第6次和第7次发生了变化。因此,在时间9、10和11,“out”取这些时间的当前值“in”,在这种情况下它总是“up”


哪种评估是正确的?

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

$monitor("%g out = %b", $time, out);
监控
out
信号并运行一些模拟器(如Riviera)。结果是:


因此,您的第一种方法是正确的。

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


谢谢你的文件,但读完这些文件后,我需要一段时间才能明白如何回答我的问题。
 0 out = x
 4 out = 0
11 out = 1