可能有很多线程正在启动。尝试在下面的显示语句中使用局部变量。参见IEEE Std 1800-2012 § 16.10局部变量
propert my_property;
static int prop_cnt=0; // shared
local int prop_id; // Note: some require the "local", other need it omitted
@(posedge clk) disable iff(reset)
($rose(halt) ##0 ((rx_prio) > (expec_prio)),
prop_id=prop_cnt++,
$display("Spawn prop_id:%0d prop_cnt:%0d @ %0t %m",
prop_id,prop_cnt,$time) )
##[0:$] ($rose(rdy),
$display("Trigger prop_id:%0d prop_cnt:%0d @ %0t %m",
prop_id,prop_cnt,$time) )
|-> ##[1:100] (my_prio[rx_prio]==1'b1,
$display("Pass prop_id:%0d prop_cnt:%0d @ %0t %m",
prop_id,prop_cnt,$time) );
endproperty : my_property
如果您看到 Spawn-Spawn-Trigger 或 Spawn-Trigger-Trigger,我们超出预期的任何内容(即 Spawn-Triger-Pass),那么就会出现意外线程。
如果是这种情况,请查看IEEE Std 1800-2012 § 16.9.8 First_match 操作
first_match(
$rose(halt) ##0 ((rx_prio) > (expec_prio)) ##[0:$] $rose(rdy),
$display("Spawn-Trigger prop_id:%0d prop_cnt:%0d @ %0t %m",
prop_id,prop_cnt,$time)
) |-> // ...
或§ 16.9.10序列包含在另一个序列中
(
( $rose(halt) ##0 ((rx_prio) > (expec_prio)) ) within $rose(rdy)[->1],
$display("Spawn-Trigger prop_id:%0d prop_cnt:%0d @ %0t %m",
prop_id,prop_cnt,$time)
) |-> // ...
您可能想要sequence
为触发器创建一个。