Последовательность systemverilog - хотите проверить значение данных при первом переходе vld в высокий уровень?

Это была моя первая наивная попытка. В основном vld может достигать максимума в любое время за 20 циклов. Но в первый раз, когда он становится высоким, data должно быть определенным значением, скажем '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 становится высоким, мне нужно data=='h20, а не 'h5, как в этом случае.


person Prasanna UV    schedule 24.04.2018    source источник


Ответы (1)


Я думаю, вам следует использовать первый match_operator следующим образом: (precondition_met) ## 0 first_match (## [1:20] vld) | -> data == 'h20

Потому что в вашем примере у него есть два совпадения: первое, когда data == 'h5, второе, когда data ==' h20

person Viktorinox    schedule 23.09.2018