为什么在延迟的导线上,在另一端不会观察到一端的急剧电压变化

时间:2016-05-11 07:31:20

标签: verilog circuit

当我写一些Verilog代码时,我发现了一些令人困惑的东西。

我定义了一条延迟为20ns的电线。该模块如下:

`timescale 1ns/1ns
module wireDelay(
    input a_i,
    output b_o
);

wire #20 w_tmp;

assign w_tmp = a_i;
assign b_o = w_tmp;

endmodule

在模拟过程中,我发现如果输入的电平不会比导线延迟停留一段时间,则在输出端不会观察到。

输入上面的波,而输出另一波。

我很奇怪它为什么会发生,现实世界中是否也是如此?

2 个答案:

答案 0 :(得分:1)

wire c;
assign #5 c = a && b; //delay in the continuous assignment

wire #5 c = a && b;   //delay in the implicit assignment

wire #5 c;  //delay in the wire declaration
assign c = a && b;    

为了证明延迟操作员的脉冲吞咽效果,请考虑以下情况。在上面的例子中,如果在时间10输入一个改变的值(并保持其值至少5个时间单位),那么输出c将在时间15改变值。如果输入a的值脉冲比传播时短延迟赋值然后a上的值不会传递给输出。

在现实世界中,组合逻辑有自己的传播延迟,因此可能会出现组合路径足够不能通过比其延迟更短的转换。见图,

你可以看到,如果发射翻转从1-0-1过渡到Off period = 5ns,但是组合路径的净延迟是10ns然后根据工作频率(当然< 10ns clk周期)它不会传递到捕获翻牌的Q.当顺序电路在那里时,时序到来。组合电路没有Clk,因此它可以根据其负载电容和CMOS的寄生元件(无论是哪个系列)以最大值工作。

答案 1 :(得分:1)

简而言之,请查看代码中“w_tmp”的声明。

wire #20 w_tmp;

该声明告诉编译器“w_tmp”是一个导线,它有20个时间单位的“惯性延迟”。 The pulse width less than inertial delay does not contain enough energy to switch output.

如果是“传输延迟”,您会在输出处观察到转换,因为“a_i”会改变它的状态。