Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
System verilog 系统Verilog-等待语句_System Verilog - Fatal编程技术网

System verilog 系统Verilog-等待语句

System verilog 系统Verilog-等待语句,system-verilog,System Verilog,我对等待声明的确切含义感到困惑 在这种情况下会发生什么: forever begin wait (vif.xn_valid == 1'b1); @(posedge vif.clk); end forever begin wait(vif.cyc_tic == 1'b1) @(posedge vif.clk) #0 fact_log2_samp_t = vif.fact_log2_samp; end forever begin wait(vif.cyc_tic

我对等待声明的确切含义感到困惑

在这种情况下会发生什么:

forever begin
    wait (vif.xn_valid == 1'b1);
    @(posedge vif.clk);
end
forever begin
    wait(vif.cyc_tic == 1'b1) @(posedge vif.clk) #0 fact_log2_samp_t = vif.fact_log2_samp;
end
forever begin
    wait(vif.cyc_tic == 1'b1) @(posedge vif.clk) #0 fact_log2_samp_t = vif.fact_log2_samp;
end
等待语句阻塞了吗?是

@(posedge vif.clk)
每次在循环内执行,而不考虑等待表达式的计算

在这种情况下:

forever begin
    wait (vif.xn_valid == 1'b1);
    @(posedge vif.clk);
end
forever begin
    wait(vif.cyc_tic == 1'b1) @(posedge vif.clk) #0 fact_log2_samp_t = vif.fact_log2_samp;
end
forever begin
    wait(vif.cyc_tic == 1'b1) @(posedge vif.clk) #0 fact_log2_samp_t = vif.fact_log2_samp;
end
是等待0 fact_log2_samp_t=vif.fact_log2_samp之后的代码; 仅当等待表达式的计算结果为真时执行?

在本例中

forever begin
    wait (vif.xn_valid == 1'b1);
    @(posedge vif.clk);
end
循环阻塞,直到表达式vif.xn_valid==1'b1为真,然后它阻塞,直到vif.clk上有一个posedge

等待语句阻塞,直到条件为真。如果条件已为真,则立即执行

在这种情况下:

forever begin
    wait (vif.xn_valid == 1'b1);
    @(posedge vif.clk);
end
forever begin
    wait(vif.cyc_tic == 1'b1) @(posedge vif.clk) #0 fact_log2_samp_t = vif.fact_log2_samp;
end
forever begin
    wait(vif.cyc_tic == 1'b1) @(posedge vif.clk) #0 fact_log2_samp_t = vif.fact_log2_samp;
end
循环阻塞,直到表达式vif.cyc_tic==1'b1为真,然后它阻塞,直到vif.clk上有一个posedge。这与:

forever begin
    wait(vif.cyc_tic == 1'b1);
    @(posedge vif.clk);
    #0 fact_log2_samp_t = vif.fact_log2_samp;
end