2016-03-28 18 views
0

我已经为具有同步低电平有效复位的简单正边沿触发器d触发器创建了测试台。在测试平台中,第一种情况在“@posedge clk”中给出输入,而在第二种情况下,我基于“等待10ns”语句给出输入。当为以下简单的D触发器使用事件控制语句和等待语句时,为什么输出存在差异

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

我在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

回答

0

使用等待声明:

延迟特定仿真时间执行过程语句。

#< _time> < _statement>;

使用基于事件的声明:

延迟下一个语句的执行,直到一个信号指定的过渡。

@(< posedge> | < negedge> signal)< statement>;

电平敏感,即使控制(等待语句):

延迟下一条语句的执行,直到<表达式>的值为true

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

现在我认为你能够区分对吧?

+0

谢谢......我还有一些关于此的附加信息。额外的信息+你的回答清除了很多东西......我也深入检查了ModelSim中的列表视图中的信号..我对整个问题有着不同的角度...... –

+0

@ Edwin Joseph:你是欢迎! –