SystemVerilog wait() 语句

use*_*047 0 verilog system-verilog uvm

SystemVerilog 是否支持以下代码?

int cnt = 0;
wait( cnt == (cnt+1) )
Run Code Online (Sandbox Code Playgroud)

任何人都可以指出LRM中的部分吗?

Kar*_*hah 5

这是支持的。但主要的问题是,你会通过这样的等待语句得到什么,因为这个语句永远不会被评估为 "true"

如果您通过此等待语句提供有关您到底想要做什么的更多详细信息,也许我可以帮助您。

同时,根据您的等待语句,这是带有输出的代码。这将帮助您了解此等待语句的作用:

// Sample code, as per your wait statement
module top();
  int cnt;
  bit clk;

  always #5 clk = ~clk;

  always @ (posedge clk)
    cnt <= cnt + 1;

  initial
    begin
      $display("***** Before wait *****");
      wait(cnt == (cnt + 1))
      $display("***** After wait *****");
    end

  initial #100 $finish;
  initial $monitor("cnt - %0d", cnt);    
endmodule

// Output of this sample code
***** Before wait *****
cnt - 0
cnt - 1
cnt - 2
cnt - 3
cnt - 4
cnt - 5
cnt - 6
cnt - 7
cnt - 8
cnt - 9
cnt - 10
$finish called from file "testbench.sv", line 20.
$finish at simulation time                  100
Run Code Online (Sandbox Code Playgroud)