首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SystemVerilog wait()语句

SystemVerilog wait()语句
EN

Stack Overflow用户
提问于 2016-01-27 06:08:44
回答 4查看 45.2K关注 0票数 0

SystemVerilog中是否支持以下代码?

代码语言:javascript
运行
复制
int cnt = 0;
wait( cnt == (cnt+1) )

有谁能给我指一下LRM的那部分吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-02-04 16:09:49

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

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

同时,这是代码,根据您的等待语句,它的输出。这将帮助您理解这个等待语句将做什么:

代码语言:javascript
运行
复制
// 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
票数 5
EN

Stack Overflow用户

发布于 2016-01-27 07:07:39

我想答案取决于你所说的支持是什么意思?当然,您可以编写没有意义的表达式,并且总是导致false (1'b0)。这将导致等待语句挂起并挂起执行它的任何进程。

票数 2
EN

Stack Overflow用户

发布于 2017-08-29 18:25:37

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

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

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

LRM部分,您可以阅读更多关于等待语句的信息: 9.4.3 (级别敏感事件控制)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35029984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档