为什么在以下简单的 D 触发器示例中使用 Event Control Statement 和 Wait 语句时输出会有所不同

Why is there a difference in Output when using Event Control Statement and Wait statement for the following simple D Flipflop example

我已经为具有同步低电平有效复位的简单上升沿触发器创建了一个测试平台。在测试台中,第一种情况在“@posedge clk”处提供输入,第二种情况我根据 "wait 10ns" 语句提供输入。

在第一种情况下,触发器的输出在一个时钟周期后发生变化,而在第二种情况下,它会在模拟器中的同一时钟周期内立即发生变化。

我在 Quartus Simulator 中进行仿真。

为什么?这就是我想知道的。

代码如下: ///////////////////////////

initial
begin
    //Case 1: Using Event Based statements
    n_reset = 1'b0;
    reset = 1'b1;
    d = 1'b0;
    repeat(2)@(posedge clk);
    n_reset = 1'b1;
    repeat(2)@(posedge clk);
    d = 1'b1;
    @(posedge clk);
    d = 1'b0;
    @(posedge clk);
    d = 1'b1;

    //Case 2: Using wait Statement
    #50ns;
    n_reset = 1'b0;
    reset = 1'b1;
    d = 1'b0;
    #50ns;
    n_reset = 1'b1;
    #20ns;
    d = 1'b1;
    #10ns;
    d = 1'b0;
    #10ns;
    d = 1'b1;
    #50ns;

end

Waveform of D FlipFlop with the testbench

使用等待语句:

将程序语句的执行延迟特定的模拟时间。

"#<_time> <_statement>;"

使用基于事件的语句:

延迟下一条语句的执行,直到信号上的指定转换。

@(|信号)<语句>;

电平敏感偶数控制(等待语句):

延迟执行下一条语句,直到 <表达式> 的计算结果为真

等待(<表达式>)<语句>;

现在我想你可以区分了吧?