veriloghdl中的惯性延迟
我发现了两个不同的来源,用两种不同的方式解释了Verilog HDL中的惯性延迟 1) 第一个表示任何小于指定延迟的输入信号都将被忽略 2) 第二种说法是,给定一个输入的变化,输出信号将在预定时间使用当时输入信号的值进行评估 例如:考虑一个延迟缓冲区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
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