2017-03-08 2 views
0

Ich möchte sagen "Wenn es eine unbegrenzte Anzahl von Eingängen gibt, bekomme ich schließlich eine Ausgabe", wie kann ich das tun?Wie kann ich SystemVerilog-Sequenzeigenschaften in Asserts verwenden?

In anderen Teilen des Skripts möchte ich eine begrenzte Anzahl von Eingängen annehmen, so dass ich nicht einfach schreiben kann "nehme an, dass es eine unbegrenzte Anzahl von Eingängen gibt" und global halten.

Bisher habe ich geschrieben Eigenschaften:

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); 

aber wenn ich diese laufen bekomme ich einen Fehler: property instance always_another_valid_input is not allowed in sequence expression.

Wenn ich beide Seiten der |-> mit einer Nicht-Sequenz-Eigenschaft ersetzen, bekomme ich immer noch einen Fehler. Es funktioniert nur, wenn beide Seiten Nicht-Sequenz-Eigenschaften sind.

Gibt es eine gute Möglichkeit, dies zu umgehen?

Antwort

1

Siehe IEEE Std 1800-2012 § 16.12 Deklarieren von Eigenschaften und insbesondere § 16.12.6 Implikation, sehen Sie die |-> Syntax ussage wird wie folgt beschrieben:

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

Die linke Seite muss sein, Sequenz- oder Sequenzausdruck. Es kann keine Eigenschaft sein, auch wenn diese Eigenschaft nur einen Sequenzausdruck enthält.

Wenn Sie always_another_valid_input als sequence anstelle eines property erklären, wird Ihr Code kompilieren

sequence always_another_valid_input; 
    @(posedge clock) ##[1:$] valid_input; 
endsequence
Verwandte Themen