SystemVerilog中是否支持以下代码?
int cnt = 0;
wait( cnt == (cnt+1) )
有谁能给我指一下LRM的那部分吗?
发布于 2016-02-04 16:09:49
这是支持的。但主要的问题是,您将从这样的等待语句得到什么,因为--这个语句永远不会被评估为"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
发布于 2016-01-27 07:07:39
我想答案取决于你所说的支持是什么意思?当然,您可以编写没有意义的表达式,并且总是导致false (1'b0)。这将导致等待语句挂起并挂起执行它的任何进程。
发布于 2017-08-29 18:25:37
是的,是支持的。即使在逻辑上知道它将挂起,也不会得到任何编译错误。(如果这是你问的意思的话)
“等待”语句是级别敏感的,并且将无限地等待,直到表达式被计算为true。它通常用于在执行另一个事件之前等待一个事件,或者将代码的执行推迟到某个事件发生时。
因为在systemverilog中线程是动态创建的,所以事件之间的同步是必要的,这就是可以使用等待语句的地方。
LRM部分,您可以阅读更多关于等待语句的信息: 9.4.3 (级别敏感事件控制)
https://stackoverflow.com/questions/35029984
复制相似问题