(1)if语句是非阻塞语句,在initial语句中遇到 if 语句时,会判断条件是否成立,如果if条件成立,将会执行if条件成立后的语句;如果if 语句不成立,那么if后面的语句将会跳过而不执行。不会阻塞后面语句的执行,所以它是非阻塞语句。
(2)wait语句是阻塞语句,遇到wait语句时,会判断wait语句条件是否成立,如果不成立,wait语句将会阻塞,wait语句以及后面的语句将不会执行;直到wait语句条件满足,才会执行wait语句以及后面的语句。所以wait语句是阻塞语句。
如下面的示例:文章来源:https://www.toymoban.com/news/detail-631602.html
reg a;
initial
begin
a=0;
#100000000 a=1;
#100 a=0;
end
initial begin:wait_block
wait (a==1)
$display("wait a==1 is %d ",$time);
end
initial begin:if_block
if(a==1)
begin
$display("if statements is %d\n",$time);
$display("****************************");
end
end
上述示例中,reg在0时刻为0,在#100000000延时后变为1,又延时100后变为0。
在wait_block语句块中,因为a变量在0~100000000之间为0,所以wait语句将会阻塞,$display语句将不会执行。在100000000时刻,a变为1,所以wait语句将会执行,且只执行一次。
在if_block语句中,因为a变量在0~100000000之间为0,if_block语句在0时刻开始执行,此时,if(a==1)不满足条件,所以if语句跳过将不执行。文章来源地址https://www.toymoban.com/news/detail-631602.html
到了这里,关于Verilog中if 语句与wait语句的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!