SystemVerilog wait()语句

SystemVerilog wait()语句,verilog,system-verilog,uvm,Verilog,System Verilog,Uvm,SystemVerilog是否支持以下代码 int cnt = 0; wait( cnt == (cnt+1) ) 有人能给我指出LRM中的部分吗?我想答案取决于你所说的“支持”是什么意思?当然,您可以编写毫无意义的表达式,这些表达式总是会导致错误的1'b0。这将导致wait语句挂起并挂起执行它的任何进程 这是受支持的。但主要的问题是,通过这样的wait语句,你会得到什么,因为这个语句永远不会被评估为true 也许我可以帮助你,如果你提供更多的细节,你到底想做什么,通过这个等待声明 同时,根据

SystemVerilog是否支持以下代码

int cnt = 0;
wait( cnt == (cnt+1) )

有人能给我指出LRM中的部分吗?

我想答案取决于你所说的“支持”是什么意思?当然,您可以编写毫无意义的表达式,这些表达式总是会导致错误的1'b0。这将导致wait语句挂起并挂起执行它的任何进程

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

也许我可以帮助你,如果你提供更多的细节,你到底想做什么,通过这个等待声明

同时,根据wait语句,下面是代码及其输出。这将帮助您了解此等待语句的作用:

// 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

是的,它是受支持的。即使在逻辑上知道编译错误将挂起,也不会得到任何编译错误。如果这是你在询问时的意图

wait语句是级别敏感的,将无限期地等待,直到表达式的计算结果为true。它通常用于在执行另一个事件之前等待一个事件,或者延迟代码的执行,直到某个事件发生

因为在systemverilog中线程是动态创建的,所以事件之间的同步是必要的,这就是可以使用wait语句的地方

在LRM部分,您可以阅读更多关于wait语句的信息:9.4.3级别敏感事件控制,而不是uvm_事件,您可以使用SystemVerilog自己的事件类型。这将删除对uvm_pkg的依赖关系


关于进程间通信邮箱、信号量、互斥、事件@LRM第15章,您可以找到很多信息。

第9.4节介绍了等待语句。您好,您所说的是正确的。等待根本不会停止。实际上我想在两个过程之间进行协调。我想用一个变量。现在我已经完成了使用uvm_事件。请稍候。它解决了我的所有需求,并且您永远不应该使用wait语句,在LHS和RHS中使用与您在代码中编写的相同的变量
class container;
  event from_a;

  task a();
    ...
    -> from_a;
    ...
  endtask

  task b();
    ...
    @ from_a;
    ...
  endtask
endclass