System verilog Systemverilog序列-要在vld第一次变高时检查数据值吗?

System verilog Systemverilog序列-要在vld第一次变高时检查数据值吗?,system-verilog,system-verilog-assertions,System Verilog,System Verilog Assertions,这是我第一次天真的尝试。基本上,vld可以在20个周期内的任何时候达到高位。但是当它第一次变高时,数据需要是一个特定的值,比如说'h20 sequence correct_vld_and_data; ##[1:20] vld ##0 (data == 'h20); endsequence property prop_correct_vld_and_data; @(posedge clk) (precondition_met) ->

这是我第一次天真的尝试。基本上,
vld
可以在20个周期内的任何时候达到高位。但是当它第一次变高时,
数据
需要是一个特定的值,比如说
'h20

sequence correct_vld_and_data;
    ##[1:20] vld
    ##0 (data == 'h20);
endsequence

property prop_correct_vld_and_data;
    @(posedge clk)
        (precondition_met) 
        -> 
        (correct_vld_and_data);
endproperty

assert prop_correct_vld_and_data;
问题是,上述序列与以下情况匹配;但我不希望它匹配,这意味着我确实希望触发断言错误:

t=0    : precondition_met==1
t=1-4  : vld==0
t=5    : vld==1 data=='h5
t=6-9  : vld==0
t=10   : vld==1 data=='h20
t=11-20: vld==0

第一次vld变高时,我需要的是
数据=='h20
,而不是像这种情况那样的
'h5

我认为您应该使用第一个匹配操作符,如下所示: (前提条件满足)##0第一匹配(##[1:20]vld)|->数据=='h20

因为在您的示例中,它有两个匹配项: 数据=='h5时的第一个 当数据=='h20时的第二个