Как я могу использовать свойства последовательности SystemVerilog в утверждениях?

Я хочу сказать: «Если есть неограниченное количество входов, в конечном итоге я получу выход», как я могу это сделать?

В других частях сценария я хочу предположить ограниченное количество входных данных, поэтому я не могу просто написать «предположить, что существует неограниченное количество входов» и сохранить это глобально.

Пока что я написал свойства:

property always_another_valid_input;
   @(posedge clock) ##[1:$] valid_input;
endproperty

property foo;
    @(posedge clock) always_another_valid_input |-> ##[0:$] bar == 1;
endproperty

assert property (foo);

но когда я запускаю это, я получаю сообщение об ошибке: property instance always_another_valid_input is not allowed in sequence expression.

Если я заменю любую сторону |-> свойством непоследовательности, я все равно получаю сообщение об ошибке. Это работает только тогда, когда обе стороны не являются свойствами последовательности.

Есть ли хороший способ обойти это?


person R.Mckemey    schedule 08.03.2017    source источник


Ответы (1)


См. IEEE Std 1800-2012 16.12 Объявление свойств < / em>, а точнее 16.12.6 Implication, вы увидите, что |-> синтаксис ussage описывается как:

property_expr :: =
...
sequence_expr |-> property_expr
sequence_expr |=> property_expr

Левая часть должна быть последовательностью или выражением последовательности. Это не может быть свойством, даже если это свойство содержит только выражение последовательности.

Если вы объявите always_another_valid_input как sequence вместо property, ваш код будет компилироваться

sequence always_another_valid_input;
   @(posedge clock) ##[1:$] valid_input;
endsequence
person Greg    schedule 08.03.2017