Puis-je générer un certain nombre de SystemVerilog propriétés à l'intérieur d'une boucle?
J'ai deux paniers tableaux de signaux et j'ai besoin de créer une propriété et associés affirmation de cette propriété qui prouve que les deux tableaux sont identiques, sous certaines conditions. Je suis officiellement la vérification et de l'outil ne peut pas être à la fois complète les tableaux en une seule propriété, donc j'ai besoin de le diviser en éléments individuels. Donc, il y a un moyen pour que je puisse générer les propriétés de chaque élément du tableau à l'aide d'une boucle? Pour le moment mon code est très détaillé et difficile à naviguer.
Mon code ressemble à ceci:
...
property bb_3_4_p;
@(posedge clk)
bb_seq
|=>
bb_exp [3][4] == bb_rtl [3][4] ;
endproperty
property bb_3_5_p;
@(posedge clk)
bb_seq
|=>
bb_exp [3][5] == bb_rtl [3][5] ;
endproperty
property bb_3_6_p;
@(posedge clk)
bb_seq
|=>
bb_exp [3][6] == bb_rtl [3][6] ;
endproperty
...
...
assert_bb_3_4: assert property (bb_3_4_p);
assert_bb_3_5: assert property (bb_3_5_p);
assert_bb_3_6: assert property (bb_3_6_p);
...
C'est un peu la façon dont j'aimerais que mon code ressemble à:
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++)
begin
property bb_[i]_[j]_p;
@(posedge clk)
bb_seq
|=>
bb_exp [i][j] == bb_rtl [i][j] ;
endproperty
assert_bb_[i]_[j]: assert property (bb_[i]_[j]_p);
end
Pouvez-vous mettre un peu de code? Est-ce le tout dans un contexte procédural?
Les propriétés et les affirmations sont à l'intérieur d'un module. Je pense que vous pourriez avoir à mettre pour des boucles dans un bloc qui je ne pense pas que vous pouvez mettre les propriétés.
Les propriétés et les affirmations sont à l'intérieur d'un module. Je pense que vous pourriez avoir à mettre pour des boucles dans un bloc qui je ne pense pas que vous pouvez mettre les propriétés.
OriginalL'auteur WestHamster | 2012-10-17
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer de déclarer la propriété avec les ports de sorte que vous pouvez les réutiliser pour plusieurs affirmations. Ensuite déclarer vos affirmations à l'aide d'un générer de la boucle.
Vous pouvez également inline de la propriété dans l'affirmation:
Mise à JOUR: je peux maintenant travailler sur l'affirmation de nom/numéro est dans mon outil formel. Toutefois, si vous savez de toute affirmation de nommage astuce alors je suis tout oreilles.
Si vous voulez plus de contrôle sur l'information, vous pouvez ajouter un bloc action de l'assertion. Quelque chose comme
assert property (...) else $display("Assertion %m failed");
Si vous souhaitez utiliser étiquette : pour consulter l'affirmation, je vous recommande l'ajout de begin : array_name ... fin à l'extérieur de générer de la boucle, afin que cet outil n'utilise pas genblkX[i].Si j'ai plusieurs affirmations, ai-je besoin d'un distinct générer boucle pour chacun d'eux?
OriginalL'auteur