zl程序教程

您现在的位置是:首页 >  其它

当前栏目

Verilog中if 语句与wait语句的区别

区别 语句 if Verilog WAIT
2023-09-11 14:20:47 时间

(1)if语句是非阻塞语句,在initial语句中遇到 if 语句时,会判断条件是否成立,如果if条件成立,将会执行if条件成立后的语句;如果if 语句不成立,那么if后面的语句将会跳过而不执行。不会阻塞后面语句的执行,所以它是非阻塞语句。
(2)wait语句是阻塞语句,遇到wait语句时,会判断wait语句条件是否成立,如果不成立,wait语句将会阻塞,wait语句以及后面的语句将不会执行;直到wait语句条件满足,才会执行wait语句以及后面的语句。所以wait语句是阻塞语句。
如下面的示例:

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语句跳过将不执行。