assign语句延迟

2021-05-31  本文已影响0人  浙南旧事

之前一直对assign语句的延迟作用有一些疑问,特别是在指定的延迟时间内,输入有多次变化时。虽然都说在延迟时间内,输入如果有变化,就取最新的值,但看实际波形时,老感觉对不上。

后来搜到 https://blog.csdn.net/qq_20222919/article/details/107576195 这篇文章,感觉比较靠谱,说是输入停止变化后,延迟指定时间,再取最新的输入值做运算输出。

这里再做进一步分析。
"输入停止变化",应该是说变化后,至少要维持指定的延迟时间这么长。

第一个用例,延迟5个时间单位。
源码:

module D(out, a);
output out;
input a;

assign #5 out = a;
endmodule

测试代码:

module stimulus;

reg a;
wire out;

D d1(out, a);

initial
begin
    a = 1'b0;
    #10;
    
    #1;
    a = 1'b1;
    
    #2;
    a = 1'b0;

    #3;
    a = 1'b1;
    
    #4;
    a = 1'b0;

    #5;
    a = 1'b1;
    
    #6;
    a = 1'b0;
    
    #20;
    $finish;
end

endmodule

波形图如下:


5ns.jpg

第二个用例,其他都一模一样,就是延迟改成6个时间单位。
波形图如下:


6ns.jpg

第三个用例,延迟改成10个时间单位。
波形图如下:


10ns.jpg
上一篇 下一篇

猜你喜欢

热点阅读