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时的第二个