1

Je souhaite écrire une propriété dans SVA pour vérifier formellement un comportement.Comment écrire une propriété dans les assertions System verilog?

Voici ce que je veux:

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

Comment puis-je réécrire la propriété ci-dessus afin qu'après SIG1 tombe, il reste LOW pendant restant cycles d'évaluation?

Note: Je ne veux pas mettre SIG1 comme ssi désactiver (de SIG1)

Merci à!

+0

est-il "après SIG1 tombe, il reste LOW pendant restant cycles d'évaluation" partie du _precondition_ ou _condition_? En d'autres termes, voulez-vous vérifier que sig4 == sig3 _if_ sig1 reste bas OU voulez-vous _check_ que sig1 est resté bas ainsi que vérifier sig4 = sig3? –

Répondre

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

Voir la section 16.9.9 Conditions sur des séquences dans la LRM 1800-2012

+0

Merci! Une requête de plus: comment puis-je étendre cette propriété pour vérifier la séquence conséquente/satisfaisante sur 16 cycles consécutifs (sig4 == sig3) [* 16]? Aussi en vous assurant que sig1 == 1'b0; – kkdev

+0

Vous pouvez également utiliser ** tout ** dans le conséquent, mais dans un cas simple, vous pouvez simplement faire '(! Sig1 && sig4 == sig3) [* 16]' –

+0

Dans le cas ci-dessus, si sig1 est un entrée primaire alors l'outil va essayer de trouver un contre-exemple où sig1 est 1'b1. J'ai essayé d'utiliser "tout" en conséquence, mais pas avec succès. Puis-je essayer quelque chose comme ci-dessous? (! Sig1) dans l'ensemble (## [1: $] first_match ($ fall (sig2)) ## 0 sig3 | -> sig4 == sig3) – kkdev