1

Ich möchte eine Eigenschaft in SVA schreiben, um ein Verhalten formal zu verifizieren.Wie schreibe ich Eigenschaft in System Verilog Assertions?

Hier ist, was ich will:

property prop1(sig1,sig2,sig3,sig4); 
    @(posedge clk) 
    $fell(sig1) ##[1:$] first_match($fell(sig2)) ##0 sig3 |-> sig4 == sig3; 
endproperty 

Wie kann ich die obige Eigenschaft umschreiben, so dass nach sig1 fällt, bleibt es LOW während Auswertezyklen verbleibenden?

Anmerkung: Ich möchte nicht sig1 als disable iff (SIG1)

Dank setzen! Abschnitt

+0

Ist "nach sig1 fällt, es bleibt LOW während verbleibenden Bewertungszyklen" Teil des _precondition_ oder _condition_? Mit anderen Worten, möchten Sie überprüfen, ob sig4 == sig3 _if_ sig1 niedrig bleibt oder wollen Sie _check_, dass sig1 niedrig geblieben ist und sig4 = sig3? –

Antwort

2
property prop1(sig1,sig2,sig3,sig4); 
    @(posedge clk) 
    (!sig1) throughout (##[1:$] first_match($fell(sig2)) ##0 sig3) 
      |-> sig4 == sig3; 
endproperty 

See 16.9.9 Bedingungen über Sequenzen in der 1800-2012 LRM

+0

Danke! Eine weitere Frage: Wie kann ich diese Eigenschaft erweitern, um die Folgefolge über 16 aufeinanderfolgende Zyklen zu überprüfen (sig4 == sig3) [* 16]? Auch während Sie sicherstellen, sig1 == 1'b0; – kkdev

+0

Sie können ** auch ** in der Konsequenz verwenden, aber in einem einfachen Fall können Sie einfach '(! Sig1 && sig4 == sig3) [* 16]' –

+0

Im obigen Fall, wenn sig1 ist a Primäreingabe versucht das Tool dann ein Gegenbeispiel zu finden, wobei sig1 1'b1 ist. Ich habe versucht, konsequent "durchgängig" zu verwenden, aber nicht mit Erfolg. Kann ich etwas wie unten versuchen? (! Sig1) durchgängig (## [1: $] first_match ($ fell (sig2)) ## 0 sig3 | -> sig4 == sig3) – kkdev